#include <cstdio>
#include <math.h>
using namespace std;
unsigned long int n,k,v[16002],s,d,j;
FILE *f;
bool se_poate(unsigned long int m,unsigned long int t)
{
unsigned long int tr=1,i=1,s=0;
while((tr<=t)&&(i<=n))
if(m==s+v[i]){s=0;tr++;i++;}
else if(m>s+v[i]){s+=v[i];i++;}
else if(m<s+v[i]){s=0;tr++;}
if(i>n)
return true;
return false;
}
int main()
{
f=fopen("transport.in","r");
fscanf(f,"%ld %ld",&n,&k);
s=INFINITY;
d=0;
for(j=1;j<=n;j++)
{
fscanf(f,"%ld",&v[j]);
d+=v[j];
if(s>v[j])
s=v[j];
}
fclose(f);
while (s!=d)
{
if(se_poate((s+d)/2,k))
d=(s+d)/2;
else
s=(s+d)/2+1;
}
f=fopen("transport.out","w");;
fprintf(f,"%ld",s);
fclose(f);
return 0;
}