#include <iostream>
#include <stdio.h>
#define NMAX 16000
#define KMAX 16000
using namespace std;
int v[NMAX + 1];
bool ok (int mij, int n, int k) {
int i, sum, cnt;
sum = cnt = 0;
i = 0;
while (i < n && v[i] <= mij) {
sum += v[i];
if (sum > mij) {
sum = v[i];
cnt++;
}
i++;
}
if (cnt + 1 > k || v[i] > mij)
return 0;
else
return 1;
}
int cautbin(int st, int dr, int n, int k) {
int sol, mij;
while (st <= dr) {
mij = (st + dr) / 2;
if (ok(mij, n, k) == 1) {
dr = mij - 1;
sol = mij;
}
else
st = mij + 1;
}
return sol;
}
int main() {
FILE *fin, *fout;
int n, k, i;
fin = fopen("transport.in", "r");
fscanf(fin, "%d%d", &n, &k);
for (i = 0; i < n; i++)
fscanf(fin, "%d", &v[i]);
fclose( fin );
fout = fopen("transport.out", "w");
fprintf(fout, "%d", cautbin(1, n * KMAX, n, k));
fclose( fout );
return 0;
}