#include #include using namespace std; #define rep(i,n) for(int i = 0; i < (int)(n); i++) constexpr int inf = 2e9; #include using namespace atcoder; /* #include #include namespace mp = boost::multiprecision; */ using ll = long long; pair op(pair a, pair b) { return min(a,b); } pair e() { return {inf,inf}; } int main() { int N, Q; cin >> N >> Q; segtree, op, e> seg(N); rep(i,N) { int s; cin >> s; seg.set(i,{s,i}); } while (Q--) { int l,r,k; cin >> l >> r >> k; l--; if (k == 1) cout << seg.prod(l,r).first << endl; else { ll ans = 0; vector> M(k - 1); for (int i = 0; i < N; i++) { auto [val,idx] = seg.prod(l,r); M[i] = {val,idx}; seg.set(idx,{inf,idx}); ans += val; } cout << ans + seg.prod(l,r).first << endl; for (int i = 0; i < N; i++) { seg.set(M[i].first,M[i]); } } } }