#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define all(x) x.begin(), x.end()
#define ff first
#define ss second
const ll inf = 4e18;
struct l{ ll m,b,id; };
ll f(l a,ll x){ return a.m*x+a.b; }
bool bad(l a,l b,l c){
return (__int128)(b.b-a.b)*(a.m-c.m) >= (__int128)(c.b-a.b)*(a.m-b.m);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
ll n,k; cin>>n>>k;
vector<ll>a(n+1),s(n+1);
for(ll i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
vector<vector<ll>> par(k+2, vector<ll>(n+1));
vector<ll>dp(n+1,inf),ndp(n+1);
dp[0]=0;
for(ll j=1;j<=k+1;j++){
deque<l>q;
q.pb({0,0,0});
for(ll i=1;i<=n;i++){
while(q.size()>=2 && f(q[0],s[i])>=f(q[1],s[i])) q.pop_front();
ndp[i]=f(q[0],s[i])+s[i]*s[i];
par[j][i]=q[0].id;
l nw={-2*s[i],dp[i]+s[i]*s[i],i};
while(q.size()>=2 && bad(q[q.size()-2],q.back(),nw)) q.pop_back();
q.pb(nw);
}
dp=ndp;
}
vector<ll> cuts;
ll i=n;
for(ll j=k+1;j>=1;j--){
ll t=par[j][i];
cuts.pb(t);
i=t;
}
reverse(all(cuts));
for(ll x:cuts) cout<<x<<" ";
}