#include using namespace std; vector tree; bool binser(int l, int r, int x){ if(l>r) return false; int mid = l+(r-l)/2; if(tree[mid] == x) return true; else if(tree[mid] < x) return binser(mid+1, r, x); else return binser(l, mid-1, x); } int dark(int l, int r, int x, int diff){ if(l>r) return -1; int mid = l+(r-l)/2; int temp; if(abs(tree[mid]-x) < diff){ temp = abs(tree[mid]-x); int end = dark(l, r, x, temp); if(end == -1){ return mid; } else return end; } else { if(tree[mid] < x) return dark(mid+1, r, x, diff); else return dark(l, mid-1, x, diff); } } int main(){ int n, m, a, b; cin >> n >> m; for(int i = 1; i <= n; i++){ cin >> a; tree.push_back(a); } vector> fish; int pow = 0; int closest, move, diff, c, ans; int p, q, s, temp; for(int i = 1; i <= m; i++){ cin >> p >> q >> s; diff = s - q; vector temp = {diff, p, q, s}; fish.push_back(temp); } sort(fish.begin(), fish.end()); reverse(fish.begin(), fish.end()); for(int i = 0; i < m; i++){ b = fish[i][1]; if(binser(0, n, b)){ pow += fish[i][3]; } else { pow += fish[i][2]; diff = fish[i][3] - fish[i][2]; closest = dark(0, n, b, diff); if(closest != -1){ pow += diff; c += abs(tree[closest]-b); } } } ans = pow - c; cout << ans << endl; return 0; }