#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct nb{
ll n,v,w,q;
}ed[1000001];
ll pop=1,n,m,s,t,head[100001],dis[100001],vis[100001];
void add(ll a,ll b,ll c,ll d)
{
ed[++pop]=nb{head[a],b,c,d};head[a]=pop;
ed[++pop]=nb{head[b],a,0,-d};head[b]=pop;
}
queue<ll>q;
ll fff[100001],pre[100001];
ll SPEA()
{
memset(vis,0,sizeof(vis));
for(ll i=1;i<=n+2;i++)dis[i]=1e18;
dis[s]=0;q.push(s);fff[s]=1e18;
while(!q.empty())
{
ll u=q.front();q.pop();
vis[u]=0;
for(ll i=head[u];i;i=ed[i].n)
{
ll v=ed[i].v;
if(ed[i].w&&dis[v]>dis[u]+ed[i].q)
{
dis[v]=ed[i].q+dis[u];
pre[v]=i;fff[v]=min(ed[i].w,fff[u]);
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}return dis[t]!=1e18;
}ll ans;
void dfs()
{
ll x=t;
while(x!=s)
{
ll i=pre[x];
ed[i].w-=fff[t];
ed[i^1].w+=fff[t];
x=ed[i^1].v;
}
ans+=dis[t]*fff[t];
}ll a[100001],b[100001];
int main()
{
cin>>n>>m;
s=0,t=n+2;
add(s,1,1e18,0);add(n+1,t,1e18,0);
for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
//printf("%lld",a[i]);
for(ll i=1;i<=n;i++)add(i,i+1,1e18-a[i],0);
for(ll i=1,g,h,j;i<=m;i++)
scanf("%lld%lld%lld",&g,&h,&j),add(g,h+1,1e18,j);
while(SPEA())
dfs();
cout<<ans;
}