/*
 * ??????????????§?????????3.c
 *
 *  Created on: 2016/03/17
 *      Author: Owner
 */


#include<stdio.h>
#include<stdlib.h>

int N,K,Ans;
int *W;

//??????????????????????????§????????????K??°??§????????????????????????
void Binary(int min, int max){

	int i,mid,cnt_w,cnt_k;
	mid = (min + max)/2;

	cnt_w = 0;
	cnt_k = 1;

	//????????°??§?????????????????§??????
	for(i=0;i<N;i++){
		if(cnt_w + W[i]<= mid){ //??????????????????????????????
			cnt_w += W[i];
		}else{
			cnt_w = W[i]; //????????????????????£???????¬????????????????????????????
			cnt_k++;
		}
	}

	if(min == mid){      //???????????°??????2???????????£??????
		if(cnt_k <= K){
			Ans = mid; //??????OK??????????????°
			return;
		}else{
			Ans = max; //??????NG??????1???????????°
			return;
		}
	}

	if(cnt_k <= K){
		Binary(min,mid); //??????????????§??§???????????????????????\????????????
	}else{
		Binary(mid+1,max); //??????????????§?????????????????????????????§????????°??§??????
	}
	return;
}

int main(){
	int i,ONE_Max,Total;
	ONE_Max = 0;//????????????????????????
	Total =0;//????¨??????????

	scanf("%d %d",&N,&K);
	W = (int*)malloc(sizeof(int)*N);

	//???????????????????????????????¨??????????????±???????
	for(i=0;i<N;i++){
		scanf("%d",&W[i]);
		Total += W[i];
		if(ONE_Max<W[i]){
			ONE_Max = W[i];
		}
	}

	Binary(ONE_Max,Total);//min=ONE_Max, max=Total??§????????????????????????

	printf("%d",Ans);

	return 0;

}