#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int N = 16000;
const int A = 1;
const int B = 256000000;
int t[N], nr_drumuri, n;
bool se_pot_impacheta(int capacitate)
{
int nr_drumuri1 = 1, capacitate1=capacitate;
for (int i = 0; i < n; i++)
{
if( t[i] > capacitate ) return false;
if(capacitate1 < t[i])
if( nr_drumuri1 < nr_drumuri )
{
nr_drumuri1++;
capacitate1 = capacitate-t[i];
}
else return false;
else
{capacitate1 = capacitate1 - t[i];}
}
return true;
}
int main()
{
fin >> n >> nr_drumuri;
for (int i = 0; i < n; i++)
{
fin >> t[i];
}
int st = A, dr = B, rez = dr + 1;
while (st <= dr)
{
int m = (st + dr) / 2;
if (se_pot_impacheta(m))
{
rez = m;
dr = m - 1;
}
else
{
st = m + 1;
}
}
fout << rez;
return 0;
}