#include #include #include #include using namespace std; #define N 100002 typedef long long ll; int n,m; ll vs[N],sums[2*N]; int calc(int st, ll vmax, vector& splitted) { splitted.clear(); int pos=st; for (int i=1;i<=m;++i) { splitted.push_back(pos%n); if (vs[pos%n]>vmax) return INT_MAX/2; pos=upper_bound(sums+pos+1,sums+2*n+1,sums[pos]+vmax)-sums-1; if (pos-st>=n) return i; } return INT_MAX/2; } int main() { while(scanf("%d%d",&n,&m)==2&&n|m) { ll vmax=0,vsum=0; for (int i=0;i?=vs[i]; vsum+=vs[i]; } if (m>=n) { printf("%lld\n",vmax); continue; } sums[0]=0; for (int i=1;i<=2*n;++i) sums[i]=sums[i-1]+vs[(i-1)%n]; ll low=0,high=vsum; vector splitted; while(lowm) low=mid+1; else high=mid; } calc(0,low,splitted); int mind=INT_MAX,minst,minen; for (int i=0;im) low=mid+1; else high=mid; } ans