#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";
}