#include <fstream>
using namespace std;
const int maxN=16001;
int n,k;
int v[maxN];
bool good(int x){
int cnt=1;
int currWeight=x;
for(int i=1;i<=n;i++){
if(v[i]>x)
return false;
if(v[i]>currWeight){
cnt++;
currWeight=x;
}
currWeight-=v[i];
if(cnt>k)
return false;
}
return true;
}
int main(){
ifstream cin("transport.in");
ofstream cout("transport.out");
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>v[i];
int sol;
int step=1<<30;
for(sol=0;step>0;step>>=1)
if(good(sol+step)==false)
sol+=step;
cout<<sol+1;
return 0;
}