ET
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1e5+10;
long long n,m,a[N],b[N];
int max(int a,int b){
return a>b?a:b;
}
bool check(int mid){
long long tot=0,num=0;
for(int i=1;i<=n;i++)
{
if(tot+a[i]<=mid)tot+=a[i];
else tot=a[i],num++;
}
return num<m;
}
int main(){
cin >> n >> m;
long long l = 1,r = 0;
for(int i = 1;i <= n;i++){cin >> a[i]; r+=a[i]; l = max(l,a[i]);}
while(l < r){
long long mid = (l+r)/2;
if(check(mid)) r = mid;
else l = mid+1;
}
cout << l << endl;
return 0;
}