#include<bits/stdc++.h>
using namespace std;
int n,m;
int area[100005];
bool check(int k){
int ans=1;
int be=0;
for(int i=1;i<=n;i++){
if(be+area[i]>k){
be=0;
ans++;
}
be+=area[i];
}
return ans<=m;
}
int main (){
cin>>n>>m;
int maxn=-1,S=0;
for(int i=1;i<=n;i++){
scanf("%d",&area[i]);
maxn=max(maxn,area[i]);
S+=area[i];
}
int l=maxn,r=S;
int ans=0;
while(l+1<r){
int mid=(l+r)/2;
if(check(mid)){
ans=mid;
r=mid;
}else{
l=mid;
}
}
cout<<ans;
return 0;
}
常规写法,二分答案,但不知道为什么错