#include<bits/stdc++.h>
#define ll long long
#define endl "\n"
#define mii map<int,int>
#define mll map<ll,ll>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
using namespace std;
int n, q;
pii a[100005];
ll st[400005];
struct query {
    int ind, l, r, x;
} b[100005];
vector<pll> ans;
bool cmp(query a, query b) {
    return a.x>b.x;
}
void upd(int id, int l, int r, int pos, int val) {
    if (l>pos || r<pos) return;
    if (l==r) {
        st[id]=val;
        return;
    }
    int mid=(l+r)/2;
    upd(id*2,l,mid,pos,val);
    upd(id*2+1,mid+1,r,pos,val);
    st[id]=st[id*2]+st[id*2+1];
}
ll gsum(int id, int l, int r, int u, int v) {
    if (l>v || r<u) return 0;
    if (l>=u && r<=v) return st[id];
    int mid=(l+r)/2;
    return gsum(id*2,l,mid,u,v)+gsum(id*2+1,mid+1,r,u,v);
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n>>q;
    for (int i=1; i<=n; i++) {
        cin>>a[i].fi;
        a[i].se=i;
    }
    sort(a+1,a+n+1,greater<pii>());
    for (int i=1; i<=q; i++) {
        b[i].ind=i;
        cin>>b[i].l>>b[i].r>>b[i].x;
    }
    sort(b+1,b+q+1,cmp);
    int j=1;
    for (int i=1; i<=q; i++) {
        int l=b[i].l, r=b[i].r, x=b[i].x;
        while (j<=n && a[j].fi>=x) {
            upd(1,1,n,a[j].se,a[j].fi);
            j++;
        }
        ans.push_back({b[i].ind,gsum(1,1,n,l,r)});
    }
    sort(ans.begin(),ans.end());
    for (auto [i,j] : ans) {
        cout<<j<<" ";
    }
    return 0;
}