#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ss second
#define ff first
vector<ll> t;
void build(ll v,ll tl,ll tr,vector<ll>&a){
if(tl==tr){
t[v]=a[tl];
}else{
ll tm=(tl+tr)/2;
build(v*2,tl,tm,a);
build(v*2+1,tm+1,tr,a);
t[v]=t[v*2]+t[v*2+1];
}
}
ll qu(ll v,ll tl,ll tr,ll l,ll r){
if(tl>r or l>tr ){
return 0;
}
if(l<=tl and tr<=r){
return t[v];
}
ll tm=(tl+tr)/2;
return qu(v*2,tl,tm,l,r)+qu(v*2+1,tm+1,tr,l,r);
}
pair<ll,ll> check(vector<ll> v,ll tl,ll tr){
ll i;
if(tl==tr) return {-1,-1};
ll n=v.size();
ll sum=qu(1,0,n-1,tl,tr);
ll pr=0;
vector<ll> ind;
ll ma=0;
for(i=tl;i<=tr;i++){
pr+=v[i];
ll k=pr*(sum-pr);
ind.push_back(k);
ma=max(ma,k);
}
for(i=0;i<ind.size();i++){
if(ind[i]==ma){
return {tl+i,ind[i]};
}
}
return {-1,-1};
}
int main(){
ll n,m,k,i,j;
cin>>n>>k;
t.resize(4*n);
vector<ll> v(n);
for(i=0;i<n;i++){
cin>>v[i];
}
ll ans1;
vector<ll> ans2;
build(1,0,n-1,v);
auto jj=check(v,0,n-1);
vector<pair<ll,ll> > zuun,baruun;
k--;
ans1=0;
ans1+=jj.ss;
ans2.push_back(jj.ff+1);
priority_queue < pair<ll,pair<ll,ll> > > pq;
pq.push({jj.ss,{0,jj.ff}});
pq.push({jj.ss,{jj.ff+1,n-1}});
while(k>0 && !pq.empty()){
auto de=pq.top(); pq.pop();
ll l=de.ss.ff;
ll r=de.ss.ss;
if(l>r) continue;
auto jj=check(v,l,r);
if(jj.ff==-1) continue;
ans1 += jj.ss;
ans2.push_back(jj.ff+1);
pq.push({jj.ss,{l,jj.ff-1}});
pq.push({jj.ss,{jj.ff+1,r}});
k--;
}
cout<<ans1<<"\n";
sort(ans2.begin(),ans2.end());
for(auto jj:ans2){
cout<<jj<<" ";
}
}