#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
int left,val;
bool f;
};
int n,d,sum=0,ans=0;
int a[1000005];
node check1(int pre,int day,int x,int left){
while(pre<x&&left<=d)
pre+=a[left],left++;
node p;
p.left=left;
p.val=pre;
p.f=(pre>=x);
return p;
}
node check2(int pre,int day,int x,int left){
while(pre<x&&left<=d)
cout<<"\n"<<day,pre+=a[left],left++;
node p;
p.left=left;
p.val=pre;
p.f=(pre>=x);
return p;
}
bool check(int mid){
int sum=0,left=1;
for(int i=1;i<=d;i++){
sum/=2;
node p=check1(sum,i,mid,left);
left=p.left;
if(p.f==false)
return false;
sum=p.val;
}
return true;
}
bool pr(int mid){
int sum=0,left=1;
for(int i=1;i<=d;i++){
sum/=2;
node p=check2(sum,i,mid,left);
left=p.left;
if(p.f==false)
return false;
sum=p.val;
}
for(int i=left;i<=d;i++)
cout<<"\n"<<d;
return true;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0);
cin>>n>>d;
for(int i=1;i<=n;i++)
cin>>a[i],sum+=a[i];
int left=0,right=sum;
while(left<=right){
int mid=(left+right)/2;
if(check(mid))
left=mid+1,ans=mid;
else
right=mid-1;
}
cout<<ans;
pr(ans);
return 0;
}