#include<bits/stdc++.h>usingnamespacestd;constintN=100010,M=2000010;intn,m;intw[N];inth[N],rh[N],e[M],ne[M],idx;intdmin[N],dmax[N];boolst[N];voidadd(inth[],inta,intb){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}voidspfa(inth[],intdist[],inttype){queue<int>q;if(type==0){memset(dist,0x3f,sizeofdmin);dist[1]=w[1];q.push(1);}else{memset(dist,-0x3f,sizeofdmax);dist[n]=w[n];q.push(n);}while(!q.empty()){intt=q.front();q.pop();st[t]=false;for(inti=h[t];i!=-1;i=ne[i]){intj=e[i];if((type==0&&dist[j]>min(dist[t],w[j]))||(type==1&&dist[j]<max(dist[t],w[j]))){if(type==0)dist[j]=min(dist[t],w[j]);elsedist[j]=max(dist[t],w[j]);if(!st[j]){q.push(j);st[j]=true;}}}}}intmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);memset(h,-1,sizeofh);memset(rh,-1,sizeofrh);cin>>n>>m;for(inti=1;i<=n;i++)cin>>w[i];while(m--){inta,b,c;cin>>a>>b>>c;add(h,a,b);add(rh,b,a);if(c==2){add(h,b,a);add(rh,a,b);}}spfa(h,dmin,0);// get 1 ~ i minspfa(rh,dmax,1);// get i ~ n maxintres=0;for(inti=1;i<=n;i++)res=max(res,dmax[i]-dmin[i]);cout<<res<<endl;return0;}