#include <stdio.h>

int A[100005];
int B[100005+1];
char flag[100][2];
int fp;

int solve(int s, int l, int r, int e, int w) {
	int i,j,t;
	int esw = B[e];
	int lsw = B[l];
	int rsw = B[r];
	
	if(esw<w) return e;
	if(l==r) return l;
	if(lsw==w) return l;
	if(rsw==w) return r;

//	printf("%d %d %d %d %d %d %d %d\n", s, l, r, e, w, esw, lsw, rsw);
	if(l+5 > r) {
		t = lsw;
		for(j=l;j<=e;j++) {
			if(w < B[j]) {
				return j-1;
			}	
		}
	}
	
	for(i=0;i<fp;i++) {
		if(flag[i][0] == l && flag[i][1] == r) {
			t = lsw;
			for(j=l;j<=e;j++) {
				if(w < B[j]) {
					return j-1;
				}	
			}
			return e;
		} 
	}
	flag[fp][0] = l;
	flag[fp][1] = r;
	fp ++;
	
	if(lsw>w) {
		return solve(s, (s+l)/2, l, e, w);
	} else {
		return solve(s, l+1, (l+e)/2, e, w);
	}
}

int main(void) {
	int n, c, i, j;
	int max_c = 0;
	int w;
	int p;
	int next_w;
	scanf("%d %d\n", &n, &c);
	
	B[i] = 0;
	for(i=1;i<=n;i++) {
		scanf("%d\n", &A[i]);
		if(max_c < A[i]) max_c = A[i];
		B[i] = B[i-1] + A[i];
	}

	next_w = max_c;
	for(i=max_c;1;i++) {
		p = 0;
		for(j=0;j<c;j++) {
			fp = 0;
			p = solve(p, p, n, n, next_w);
			next_w = B[p] + i;
		}
//		printf("%d %d\n", i, p);
		
		if(p == n) {
			printf("%d\n", i);
			break;
		}
	}
	
	return 0;
}