#include <bits/stdc++.h>
using namespace std;
bool check(vector<int>& w, int m, int l) {
int g = 1;
int s = 0;
for(int i=0;i<w.size();i++){
s+=w[i];
if(s>l){
g++;
s=w[i];
if(g>m) return 0;
}
}
return g<=m;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> w(n);
for(int i=0; i<n; i++) cin >> w[i];
int right,left,maxn;
for(int i=1;i<=w.size();++i)right+=w[i];
//int left = *max_element(w.begin(), w.end());
for(int i=1;i<=w.size();++i)maxn=max(w[i-1],w[i]);
//int right = accumulate(w.begin(), w.end(), 0);
maxn=left;
while(left < right){
int mid = (left + right)/2;
if(check(w,m,mid)) right=mid;
else left=mid+1;
}
cout << left;
return 0;
}