#include<bits/stdc++.h> using namespace std; #include<atcoder/all> using namespace atcoder; using mint=atcoder::modint998244353; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define rep(i,n) for(int i=0;i<(n);i++) #define rng(i,l,r) for(int i=(l);i<(r);i++) #define ALL(x) (x).begin(),(x).end() #define fi first #define se second struct fast_io{fast_io(){cin.tie(nullptr)->sync_with_stdio(false);}}_; struct Mo{ private: struct Q{ int x,y,id; }; vector<Q> Queries; public: void add_query(int x,int y,int id){ Queries.push_back({x,y,id}); } /* prod [x,y) or [0,x),[0,y) */ template<class XP,class XM,class YP,class YM,class O> void solve(const int n,const XP& x_plus,const XM& x_minus,const YP& y_plus,const YM& y_minus,const O& out){ int q=(int)Queries.size(); int bs= max<int>(1, 1.0 * n / max<double>(1.0, sqrt(q * 2.0 / 3.0)));; sort(Queries.begin(),Queries.end(),[&](Q q1,Q q2)->bool { if(q1.x/bs<q2.x/bs)return 1; if(q1.x/bs==q2.x/bs){ if(q1.x/bs&1)return q1.y<q2.y; else return q1.y>q2.y; } return 0; }); int x=0,y=0; for(auto&&query:Queries){ while(y<query.y)y_plus(y++); while(x>query.x)x_minus(--x); while(y>query.y)y_minus(--y); while(x<query.x)x_plus(x++); out(query.id); } } }; signed main(){ #define int long long int N,Q;cin>>N>>Q; vector<int> A(N);for(auto&&e:A)cin>>e; Mo mo; vector<int> X(Q); rep(i,Q){ int l,r;cin>>l>>r;cin>>X[i];l--; mo.add_query(l,r,i); } vector<int> v=A;v.insert(v.end(),ALL(X)); sort(ALL(v));v.erase(unique(ALL(v)),v.end()); fenwick_tree<int> tr(v.size()),tr2(v.size()); vector<int> idx(N); rep(i,N)idx[i]=lower_bound(ALL(v),A[i])-v.begin(); auto xp=[&](int i){ tr.add(idx[i],-1); tr2.add(idx[i],-A[i]); }; auto xm=[&](int i){ tr.add(idx[i],1); tr2.add(idx[i],A[i]); }; auto yp=[&](int i){ tr.add(idx[i],1); tr2.add(idx[i],A[i]); }; auto ym=[&](int i){ tr.add(idx[i],-1); tr2.add(idx[i],-A[i]); }; vector<int> ans(Q); auto out=[&](int id){ // cout<<"id : "; // tr.dump(); int idx=lower_bound(ALL(v),X[id])-v.begin(); ans[id]+=X[id]*tr.sum(0,idx)-tr2.sum(0,idx); ans[id]+=tr2.sum(idx,v.size())-X[id]*tr.sum(idx,v.size()); }; mo.solve(N,xp,xm,yp,ym,out); rep(i,Q)cout<<ans[i]<<"\n"; }