#include<stdio.h>
int tree[1000000],n,m;
int check(int a){
long long int len=0,ans=0;
for(int i=0;i<n;i++){
len+=tree[i];//加上当前长度
if(len==a)//等于目标长度
{
ans++;
len=0;
}
else if(i<n-1&&len<a&&len+tree[i+1]>a)//i+1<n时,
{
ans++;
len=0;
}
else if(i==n-1){
ans++;
}
}
if(ans==m)
return 2;
else if(ans<m)
return 1;
else return 0;
}
int main(){
int i;
int left=0,mid,right=0,ans;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++){
scanf("%d",&tree[i]);
right+=tree[i];
if(tree[i]>left)
left=tree[i];
}
while(left<=right){
mid=(left+right)/2;
int temp1,temp2;
temp1=check(mid);
temp2=check(mid-1);
if(temp1==2&&temp2==0)
{
ans=mid;
break;
}
else if(temp1==2&&temp2==2){
ans=mid-1;
right=mid-1;
}
else if(temp1==0)
left=mid+1;
else if(temp1==1)
right=mid-1;
}
printf("%d",ans);
}