#include <cstdio>
#define NMAX 16005
using namespace std;
FILE *f = freopen("transport.in", "r", stdin);
FILE *g = freopen("transport.out", "w", stdout);
int v[NMAX], n, k, maxim, s=0;
void read() {
scanf("%d%d", &n, &k);
for(int i = 1; i<=n; i++)
{
scanf("%d", &v[i]);
s += v[i];
if(v[i] > maxim)
maxim = v[i];
}
}
int verif(int v[], int n, int k, int val) {
int s = 0;
for(int i = 1; i<=n; i++)
{
s += v[i];
if(s == val)
{
s = 0;
k --;
}
else if(s > val){
s = 0;
i --;
k --;
}
if(k == 0 && i < n)
return 0;
}
if(k < 0) return 0;
return 1;
}
void solve() {
int dr = s, st = maxim;
int last;
while(st <= dr) {
int mid = (st + dr) / 2;
if(verif(v, n, k, mid)) {
dr = mid - 1;
last = mid;
}
else st = mid + 1;
}
printf("%d", last);
}
int main() {
read();
solve();
return 0;
}