#include<fstream>
#include<vector>
using namespace std;
const int lim = 16000 * 16000;
bool tran(const vector<int>& saltele, const int k, const int cap)
{
int sz = saltele.size();
int sum = 0;
int cnt = 0;
for(int i = 0;i < sz;++i)
{
if(sum + saltele[i] <= cap)
{
sum += saltele[i];
}
else
{
if(saltele[i] <= cap)
{
sum = saltele[i];
++cnt;
}
else
{
return false;
}
}
}
if(cnt + 1 <= k)
{
return true;
}
return false;
}
int solve(const vector<int>& saltele, const int k)
{
int left = 1, right = lim;
int sol = 0;
while(left <= right)
{
int mid = left + (right - left) / 2;
bool rez = tran(saltele, k, mid);
if(rez)
{
right = mid - 1;
sol = mid;
}
else
{
left = mid + 1;
}
}
return sol;
}
int main()
{
ifstream in("transport.in");
ofstream out("transport.out");
int n, k;
in >> n >> k;
vector<int> saltele;
int nr;
for(int i = 0;i < n;++i)
{
in >> nr;
saltele.push_back(nr);
}
out<<solve(saltele, k)<<"\n";
in.close();
out.close();
}