#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10,INF=0x7f7f7f7f;
int h[N],w[N],e[N],ne[N],idx;
int a[N];
int mi[N],f[N];
typedef pair<int,int> PLL;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
queue<int> q;
int n,m;
void dfs(int x,int minl,int res){
int flag=1;
minl=min(minl,a[x]);
if(minl<mi[x]){
mi[x]=minl;
flag=0;
}
int maxl=max(f[res],a[x]-minl);
if(maxl>f[x]){
f[x]=maxl;
flag=0;
}
if(flag) return;
for(int i=h[x];i!=-1;i=ne[i]){
int j=e[i];
dfs(j,minl,i);
}
}
int main(){
memset(h,-1,sizeof h);
cin>>n>>m;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<N;i++){
mi[i]=INF;
}
for(int i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(z==1){
add(x,y);
}
else{
add(x,y);
add(y,x);
}
}
dfs(1,INF,0);
cout<<f[n];
}