#include<stdio.h>
using namespace std;
int v[16005], k, n, maybe;
int putere(int s)
{
int c = 0, ct = 1;
while (ct < s)
{
ct <<= 1;
c++;
}
return c-1;
}
int verificare (int x)
{
int s = 0, i, nrd = 0;
for (i = 1; i <= n; i++)
{
s += v[i];
if (s > x)
{
if (v[i] > x)
return 0;
s = 0;
i--;
nrd++;
}
if (s == x)
{
s = 0;
nrd++;
}
if (nrd > k)
return 0;
}
if (s != 0 && s < x && (nrd + 1 > k))
return 0;
if ((s != 0 && s < x) && nrd + 1 == k)
{
maybe = x;
return 1;
}
if (nrd == k)
return 2;
return 1;
}
int cautbin( int s)
{
int sol = 0, pas = 1 << putere(s*2);
while (pas > 0)
{
if (verificare(sol+pas) == 0)
sol += pas;
else
if (verificare(sol+pas) == 2)
{
sol += pas;
break;
}
pas = pas / 2;
}
if (verificare(sol) == 2)
return sol;
else
return maybe;
}
int main ()
{
FILE *in,*out;
in = fopen ("transport.in","r");
out = fopen ("transport.out","w");
fscanf (in, "%d%d", &n, &k);
int s = 0, i;
for (i = 1; i <= n; i++)
{
fscanf (in, "%d", &v[i]);
s += v[i];
}
s = s / 2;
int sol;
sol = cautbin (s);
fprintf (out, "%d", sol);
return 0;
}