import sys #input = sys.stdin.readline #input = sys.stdin.buffer.readline #文字列はダメ #sys.setrecursionlimit(1000000) import bisect #import itertools #import random #from heapq import heapify, heappop, heappush #from collections import defaultdict #from collections import deque #import copy #DeepCopy: hoge = [_[:] for _ in hogehoge] #import math #from functools import lru_cache #@lru_cache(maxsize=None) #MOD = pow(10,9) + 7 MOD = 998244353 #dx = [1,0,-1,0] #dy = [0,1,0,-1] #dx8 = [1,1,0,-1,-1,-1,0,1] #dy8 = [0,1,1,1,0,-1,-1,-1] def main(): N,Q = map(int,input().split()) A = list(map(int,input().split())) bucketSize = int(N**(0.5)) bucketNumber = N//bucketSize bucket = [] bucketCumsum = [] i = 0 for bi in range(bucketNumber): temp = [] for i in range(bucketSize): temp.append(A[bi*bucketSize + i]) temp.sort() tempcumsum = [0] for i in range(bucketSize): tempcumsum.append(tempcumsum[-1] + temp[i]) bucket.append(temp) bucketCumsum.append(tempcumsum) if N%bucketSize != 0: temp = [] for i in range(N%bucketSize): temp.append(A[bucketSize*bucketNumber + i]) bucket.append(temp) bucketNumber += 1 # print(bucketCumsum) # print(bucket) for _ in range(Q): L,R,X = map(int,input().split()) L -= 1; R -= 1 #0-index ans = 0 while L < R and L%bucketSize != 0: ans += min(X,A[L]) L += 1 while L < R and R%bucketSize != bucketSize-1: ans += min(X,A[R]) R -= 1 if L == R: print(ans) continue # print("LR",L,R,"ans",ans) left = L//bucketSize right = (R+1)//bucketSize # print("leftright",left,right) for bi in range(left,right): bucketList = bucket[bi] boundary = bisect.bisect_right(bucketList, X) # print("boundary",boundary) temp = bucketCumsum[bi][boundary] + (bucketSize - boundary) * X ans += temp print(ans) if __name__ == '__main__': main()