#include<bits/stdc++.h>
using namespace std;
int n;
int s,ts;
vector<pair<int,int> > e[3000010];
int dis[3000010];
bool vis[3000010];
int w[3000010];
int m,k;
void add(int u,int v,int w)
{
e[u].push_back({v,w});
}
void dijkstra()
{
memset(vis,0,sizeof vis);
memset(dis,-0x3f,sizeof dis);
priority_queue<pair<int,int> > q;
dis[1]=0;
q.push({dis[1],1});
while(q.size())
{
int x=q.top().second;
q.pop();
if(vis[x])continue;
vis[x]=1;
for(auto t:e[x])
{
int y=t.first,v=t.second;
if(dis[y]<dis[x]+v)
{
dis[y]=dis[x]+v;
q.push({dis[y],y});
}
}
}
return ;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>w[i];
e[i].push_back({i+1*n,-w[i]});
e[i+1*n].push_back({i+2*n,w[i]});
}
for(int i=1;i<=m;i++)
{
int u,v,p;
cin>>u>>v>>p;
add(u,v,0);
add(u+n,v+n,0);
add(u+2*n,v+2*n,0);
if(p==2)
{
add(v,u,0);
add(v+n,u+n,0);
add(v+2*n,u+2*n,0);
}
}
dijkstra();
if(dis[3*n]<=0)puts("0");
else cout<<dis[3*n]<<endl;
return 0;
}
// for(int i=1;i<=k;i++)add(ts+i*n-n,ts+i*n,0);