#include <bits/stdc++.h>
using namespace std;
#define int long long
#define a3 array <int,3>
const int N=3e5+5;
int n,m,a[N],ans;
set <a3> pos1,pos2,neg;
priority_queue <a3,vector <a3>,greater <a3>> pq;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i=1;i<=n;i++) cin >> a[i];
for(int i=1;i<=n;i++){
int sum=a[i],l=i;
while(i+1<=n && a[i]>=0 && a[i+1]>=0) sum+=a[++i];
while(i+1<=n && a[i]<0 && a[i+1]<0) sum+=a[++i];
int r=i;
if(sum>=0){
pos1.insert({sum,l,r});
pos2.insert({l,r,sum});
}
else neg.insert({l,r,sum});
}
for(;pos1.size()>m;){
auto [sum,l,r]=*pos1.begin();
auto itr=neg.lower_bound({l,r,sum});
int mn=1e9+7;
cout << pos1.size() << " ";
if(itr!=neg.end()){
mn=min(mn,(*itr)[2]);
}
if(itr!=neg.begin()){
auto itl=prev(itr);
mn=min(mn,(*itl)[2]);
}
if(mn!=1e9+7 && mn==(*itr)[2] && sum>-mn){
auto pos_it=pos2.upper_bound({l,r,sum});
if(pos_it!=pos2.end()){
auto [l2,r2,sum2]=*pos_it;
int new_sum=sum+(*itr)[2]+(*pos_it)[2];
if(itr==neg.end()){
cout << "ITR 0" << "\n";
break;
}
neg.erase(itr);
if(pos1.find({sum,l,r})==pos1.end()){
cout << "ITR 1" << "\n";
break;
}
pos1.erase(pos1.find({sum,l,r}));
if(pos1.find({sum2,l2,r2})==pos1.end()){
cout << "ITR 2" << "\n";
break;
}
pos1.erase(pos1.find({sum2,l2,r2}));
if(pos2.find({l,r,sum})==pos2.end()){
cout << "ITR 3" << "\n";
break;
}
pos2.erase(pos2.find({l,r,sum}));
if(pos2.find({l2,r2,sum2})==pos2.end()){
cout << "ITR 4" << "\n";
break;
}
pos2.erase(pos2.find({l2,r2,sum2}));
pos1.insert({new_sum,l,r2});
pos2.insert({l,r2,new_sum});
}
}
else if(mn!=1e9+7 && sum>-mn){
if(pos2.upper_bound({l,r,sum})!=pos2.begin()){
auto itl=prev(itr);
auto pos_it=prev(pos2.upper_bound({l,r,sum}));
auto [l2,r2,sum2]=*pos_it;
int new_sum=sum+(*itl)[2]+(*pos_it)[2];
if(itl==neg.end()){
cout << "ITL 0" << "\n";
break;
}
neg.erase(itl);
if(pos1.find({sum,l,r})==pos1.end()){
cout << "ITL 1" << "\n";
break;
}
pos1.erase(pos1.find({sum,l,r}));
if(pos1.find({sum2,l2,r2})==pos1.end()){
cout << "ITL 2" << "\n";
break;
}
pos1.erase(pos1.find({sum2,l2,r2}));
if(pos2.find({l,r,sum})==pos2.end()){
cout << "ITL 3" << "\n";
break;
}
pos2.erase(pos2.find({l,r,sum}));
if(pos2.find({l2,r2,sum2})==pos2.end()){
cout << "ITL 4" << "\n";
break;
}
pos2.erase(pos2.find({l2,r2,sum2}));
pos1.insert({new_sum,l,r2});
pos2.insert({l,r2,new_sum});
}
}
else{
if(pos1.find({sum,l,r})==pos1.end()){
cout << "ELSE 1" << "\n";
break;
}
pos1.erase(pos1.find({sum,l,r}));
if(pos2.find({l,r,sum})==pos2.end()){
cout << "ELSE 1" << "\n";
break;
}
pos2.erase(pos2.find({l,r,sum}));
}
cout << "XD \n";
}
//for(auto [sum,l,r]:pos1) ans+=sum;
//cout << ans;
for(auto [sum,l,r]:pos1) cout << l << " , " << r << " = " << sum << "\n";
}