#include<bits/stdc++.h>
using namespace std;
int arr[100000 + 5];
int Index[100000 + 5];
vector<int> ST[4 * 100000 + 5];
bool cmp(int i, int j)
{
return arr[i] < arr[j];
}
void build(int start, int end,int pos)
{
if (start > end)return;
if (start == end)
{
ST[pos].push_back(Index[start]);
return;
}
int mid = (start + end) >> 1;
build(start, mid, pos << 1);
build(mid + 1, end, pos << 1 | 1);
ST[pos].resize(ST[2 * pos].size() + ST[2 * pos + 1].size());
merge(ST[2 * pos].begin(), ST[2 * pos].end(), ST[2 * pos + 1].begin(), ST[2 * pos + 1].end(), ST[pos].begin());
/*
calculate prefix sum here !
for(i in ST[pos])
prefix[pos][i] = prefix[pos][i-1] + arr[ ST[pos][i-1] ];
note : here we are taking the prefix sum of values in our initial array with the help of arr[]
*/
}
int ans=0;
int Query(int L,int R,int start, int end, int pos,int k)
{
if (start == end)
return ST[pos][0];
int lo = lower_bound(ST[2*pos].begin(), ST[2*pos].end(),L) - ST[2*pos].begin();
int hi = upper_bound(ST[2*pos].begin(), ST[2*pos].end(), R) - ST[2*pos].begin();
int x = hi - lo;
int mid = (start + end) >> 1;
if (x >= k)
{
return Query(L, R, start, mid, 2 * pos, k);
}
else
{
k = k - x;
for (int i = lo; i < hi; ++i)
ans+=arr[ST[2*pos][i]];
/* we can do prefix[2*pos][hi-1] - prefix[2*pos][lo-1], hi-1 bcz upper_bound will give one index higher
*/
return Query(L, R, mid + 1,end, 2 * pos + 1, k);
}
}
int main()
{
int n, Q,L,R,k;
scanf("%d%d", &n, &Q);
for (int i = 1; i <= n; i++)
{
scanf("%d", arr + i);
Index[i] = i;
}
sort(Index + 1, Index + 1 + n, cmp);
build(1,n,1);
while (Q--)
{
ans=0;
scanf("%d%d%d", &L, &R, &k);
int x= Query(L, R, 1, n, 1, k);
printf("%d\n",ans+arr[x]);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGFyclsxMDAwMDAgKyA1XTsKaW50IEluZGV4WzEwMDAwMCArIDVdOwp2ZWN0b3I8aW50PiBTVFs0ICogMTAwMDAwICsgNV07CmJvb2wgY21wKGludCBpLCBpbnQgaikKewoJcmV0dXJuIGFycltpXSA8IGFycltqXTsKfQp2b2lkIGJ1aWxkKGludCBzdGFydCwgaW50IGVuZCxpbnQgcG9zKQp7CglpZiAoc3RhcnQgPiBlbmQpcmV0dXJuOwoJaWYgKHN0YXJ0ID09IGVuZCkKCXsKCQlTVFtwb3NdLnB1c2hfYmFjayhJbmRleFtzdGFydF0pOwoJCXJldHVybjsKCX0KCWludCBtaWQgPSAoc3RhcnQgKyBlbmQpID4+IDE7CglidWlsZChzdGFydCwgbWlkLCBwb3MgPDwgMSk7CglidWlsZChtaWQgKyAxLCBlbmQsIHBvcyA8PCAxIHwgMSk7CglTVFtwb3NdLnJlc2l6ZShTVFsyICogcG9zXS5zaXplKCkgKyBTVFsyICogcG9zICsgMV0uc2l6ZSgpKTsKCW1lcmdlKFNUWzIgKiBwb3NdLmJlZ2luKCksIFNUWzIgKiBwb3NdLmVuZCgpLCBTVFsyICogcG9zICsgMV0uYmVnaW4oKSwgU1RbMiAqIHBvcyArIDFdLmVuZCgpLCBTVFtwb3NdLmJlZ2luKCkpOwoJCQoJLyoKCQljYWxjdWxhdGUgcHJlZml4IHN1bSBoZXJlICEKCQlmb3IoaSBpbiBTVFtwb3NdKQoJCXByZWZpeFtwb3NdW2ldID0gcHJlZml4W3Bvc11baS0xXSArIGFyclsgU1RbcG9zXVtpLTFdIF07CgoJCW5vdGUgOiBoZXJlIHdlIGFyZSB0YWtpbmcgdGhlIHByZWZpeCBzdW0gb2YgdmFsdWVzIGluIG91ciBpbml0aWFsIGFycmF5IHdpdGggdGhlIGhlbHAgb2YgYXJyW10KCSovCn0KIGludCBhbnM9MDsKaW50IFF1ZXJ5KGludCBMLGludCBSLGludCBzdGFydCwgaW50IGVuZCwgaW50IHBvcyxpbnQgaykKewoJaWYgKHN0YXJ0ID09IGVuZCkKCQlyZXR1cm4gU1RbcG9zXVswXTsKCWludCBsbyA9IGxvd2VyX2JvdW5kKFNUWzIqcG9zXS5iZWdpbigpLCBTVFsyKnBvc10uZW5kKCksTCkgLSBTVFsyKnBvc10uYmVnaW4oKTsKCWludCBoaSA9IHVwcGVyX2JvdW5kKFNUWzIqcG9zXS5iZWdpbigpLCBTVFsyKnBvc10uZW5kKCksIFIpIC0gU1RbMipwb3NdLmJlZ2luKCk7CglpbnQgeCA9IGhpIC0gbG87CglpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSA+PiAxOwoKCWlmICh4ID49IGspCgl7CgkJcmV0dXJuIFF1ZXJ5KEwsIFIsIHN0YXJ0LCBtaWQsIDIgKiBwb3MsIGspOwoJfQoJZWxzZQoJewoJCWsgPSBrIC0geDsKCgkJZm9yIChpbnQgaSA9IGxvOyBpIDwgaGk7ICsraSkKCQkJYW5zKz1hcnJbU1RbMipwb3NdW2ldXTsgIAovKiB3ZSBjYW4gZG8gcHJlZml4WzIqcG9zXVtoaS0xXSAtIHByZWZpeFsyKnBvc11bbG8tMV0sIGhpLTEgYmN6IHVwcGVyX2JvdW5kIHdpbGwgZ2l2ZSBvbmUgaW5kZXggaGlnaGVyCiovCgoJCXJldHVybiBRdWVyeShMLCBSLCBtaWQgKyAxLGVuZCwgMiAqIHBvcyArIDEsIGspOwoJfQp9CgoKaW50IG1haW4oKQp7CglpbnQgbiwgUSxMLFIsazsKCXNjYW5mKCIlZCVkIiwgJm4sICZRKTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKCXsKCQlzY2FuZigiJWQiLCBhcnIgKyBpKTsKCQlJbmRleFtpXSA9IGk7Cgl9Cglzb3J0KEluZGV4ICsgMSwgSW5kZXggKyAxICsgbiwgY21wKTsKCWJ1aWxkKDEsbiwxKTsKCXdoaWxlIChRLS0pCgl7CgkJYW5zPTA7CgkJc2NhbmYoIiVkJWQlZCIsICZMLCAmUiwgJmspOwoJCWludCB4PSBRdWVyeShMLCBSLCAxLCBuLCAxLCBrKTsKCQlwcmludGYoIiVkXG4iLGFucythcnJbeF0pOwoJfQoJcmV0dXJuIDA7CiAKfSA=