#include <fstream>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
vector <int> v;
int n, k;
int ok(int c)
{
int i, s = 0, tr = 0;
for(i = 0; i <=n - 1; i++)
{
if(v[i] > c)
{
return k + 1;
}
if(s + v[i] < c)
s = s + v[i];
else
{
tr++;
s = v[i];
}
}
if(s > 0)
tr++;
return tr;
}
int bsL(int st, int dr)
{
int med, last = 16001,d;
while(st <= dr)
{
med = (st + dr)>>1;
if(ok(med) <= k)
{
last = med;
dr = med - 1;
}
else
st = med + 1;
}
return last;
}
int main()
{
int x;
int S = 0;
in >> n >> k;
for(int i = 0; i <= n - 1; i++)
{
in >> x;
v.push_back(x);
S += x;
}
sort(v.begin(), v.end());
out << bsL(0,S);
return 0;
}
//hmm