#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;
}