#include<bits/stdc++.h>
using namespace std;
int a[100010],m,n,v,w,x=INT_MIN,y,z;
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>x) x=a[i];
y+=a[i];
}
while(x<=y){
v=w=0;
z=1;
for(int i=0;i<n;i++){
if(a[i]>x+(y-x)/2){
v=1;
break;
}
if(w+a[i]<=x+(y-x)/2) w+=a[i];
else{
w=a[i];
z++;
}
}
if(z<m) y=x+(y-x)/2-1;
else if(z>m||v) x+=(y-x)/2+1;
else y--;
}
printf("%d",x);
return 0;
}
https://www.luogu.com.cn/record/154121323