/*很好的一道二分题...二分时一定要判断上下两界的情况,不然有可能会超时~~还有退出之前要判断上下两界到底要哪个..这个最好用下界,不容易错!!*/
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
#define M 1000000
using namespace std;
int a[M];
int n;
int find(int mid)
{
int sum=0;
int month=0;
for(int i=0;i<n;i++)
{
if(sum+a[i]>mid)
{
month++;
sum=a[i];
}
else
{
sum+=a[i];
}
}
return month;
}
int main()
{
freopen("3273.txt","r",stdin);
int m;
scanf("%d%d",&n,&m);
int mi=-1,ma=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(mi==-1||mi<a[i])
{
mi=a[i];
}
ma+=a[i];
}
int l=mi,h=ma;
while(l<h)
{
int mid=(l+h)>>1;
int sum=0;
int month=0;
month=find(mid);
if(month+1<=m)
{
h=mid;
}
else
{
l=mid;
}
if(l+1==h)
{
int a=find(l);
int b=find(h);
if(a+1>m)l=h;break;
}
}
printf("%d\n",l);
}