#include <bits/stdc++.h>
// #include "testlib.h"	
using namespace std ;

#define ft first
#define sd second
#define pb push_back
#define all(x) x.begin(),x.end()

#define ll long long int
#define vi vector<int>
#define vii vector<pair<int,int> >
#define pii pair<int,int>
#define plii pair<pair<ll, int>, int>
#define piii pair<pii, int>
#define viii vector<pair<pii, int> >
#define vl vector<ll>
#define vll vector<pair<ll,ll> >
#define pll pair<ll,ll>
#define pli pair<ll,int>
#define mp make_pair
#define ms(x, v) memset(x, v, sizeof x)

#define sc1(x) scanf("%d",&x)
#define sc2(x,y) scanf("%d%d",&x,&y)
#define sc3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define scll1(x) scanf("%lld",&x)
#define scll2(x,y) scanf("%lld%lld",&x,&y)
#define scll3(x,y,z) scanf("%lld%lld%lld",&x,&y,&z)

#define pr1(x) printf("%d\n",x)
#define pr2(x,y) printf("%d %d\n",x,y)
#define pr3(x,y,z) printf("%d %d %d\n",x,y,z)

#define prll1(x) printf("%lld\n",x)
#define prll2(x,y) printf("%lld %lld\n",x,y)
#define prll3(x,y,z) printf("%lld %lld %lld\n",x,y,z)

#define pr_vec(v) for(int i=0;i<v.size();i++) cout << v[i] << " " ;

#define f_in(st) freopen(st,"r",stdin)
#define f_out(st) freopen(st,"w",stdout)

#define fr(i, a, b) for(i=a; i<=b; i++)
#define fb(i, a, b) for(i=a; i>=b; i--)
#define ASST(x, l, r) assert( x <= r && x >= l )

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

const int maxn = 105000;
int A[ maxn ];

void solve() {
	int n, k;
	cin >> n >> k;
	set<pair<ll, pii> > s;
	ll sum = 0;
	for(int i=1; i<=n; i++) {
		cin >> A[i];
		sum += A[i];
	}
	s.insert(mp(sum, mp(1, n)));
	while( k -- && !s.empty() ) {
		pair<ll, pii> top = *s.rbegin();
		cout << top.ft << " \n"[k == 0];
		s.erase( top );
		int l = top.sd.ft;
		int r = top.sd.sd;
		if( l != r ) {
			s.insert(mp(top.ft-A[l], mp(l+1, r)));
			s.insert(mp(top.ft-A[r], mp(l, r-1)));
		}
	}
}

int main() {
	solve();
	return 0;
}