#include<bits/stdc++.h>
using namespace std;
struct Node{
int x,y,k;
};
int a[200001];
Node b[200001];
deque <Node> p,q;
bool cmp(Node x1,Node x2){
return x1.k<x2.k;
}
int main(){
int n,m;
long long ans=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&b[i].x,&b[i].y,&b[i].k);
}
sort(b+1,b+m+1,cmp);
for(int i=1;i<=m;i++){
while(!p.empty()&&b[i].x>=p.front().x){
p.pop_front();
}
if(!p.empty()&&p.front().k==b[i].k&&p.front().x>=b[i].x){
}
else{
p.push_front(b[i]);
}
while(!q.empty()&&b[i].y<=q.front().y){
q.pop_front();
}
if(!q.empty()&&q.front().k==b[i].k&&q.front().y<=b[i].y){
}
else{
q.push_front(b[i]);
}
}
int l=1,r=n;
int js1=1e8+1,js2=1e8+1;
int tmp=0;
ans-=q.front().y;
while(!q.empty()){
for(int i=p.back().x;i<=r;i++){
js1=min(a[i],js1);
}
r=p.back().x;
for(int i=q.back().y;i>=l;i--){
js2=min(a[i],js2);
}
l=q.back().y;
ans+=(min(p.back().k,q.back().k)-tmp)*(js1+js2);
tmp=min(p.back().k,q.back().k);
while(!p.empty()&&p.back().k<=tmp){
p.pop_back();
}
while(!q.empty()&&q.back().k<=tmp){
q.pop_back();
}
}
if(q.back().k%2==1){
ans-=js1;
}
printf("%lld",8);
return 0;
}