#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 100005;
int data[maxn];
int n,m;
bool test(int min){
int i,sum=0,group=1;
for(i=1;i<=n;i++){
if(sum+data[i]<=min){
sum += data[i];
}
else{
group++;
sum = data[i];
}
}
if(group>m){//min小了,分组较多
return true;
}
else{
return false;
}
}
int main(){
int i;
scanf("%d%d",&n,&m);
int mid,low = 0,high = 0;
for(i=1;i<=n;i++){
scanf("%d",&data[i]);
low = max(low,data[i]);
high += data[i];
}
mid = (low+high)>>1;
while(low<high){
if(test(mid)){
low = mid+1;
}
else{
high = mid-1;
}
mid = (low+high)>>1;
}
cout<<mid<<endl;
return 0;
}