#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll valu[maxn];
int fa[maxn];
int fs[maxn];
struct node{
	int u;
	int v;
	ll valu;
}no[maxn];
bool cmp(node a,node b)
{
	return a.valu<b.valu;
}
int find(int x)
{
	if(fa[x]==x)
		return x;
	return fa[x]=find(fa[x]);
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>valu[i];
	for(int i=0;i<m;i++)
		cin>>no[i].u>>no[i].v>>no[i].valu;
	sort(no,no+m,cmp);
	for(int i=1;i<=n;i++)
		fa[i]=i;
	for(int i=0;i<m;i++)
	{
		int f1=find(no[i].u);
		int f2=find(no[i].v);
		if(f1!=f2)
		{
			fa[f1]=f2;
			valu[f2]+=valu[f1];
			fs[f2]+=fs[f1];
		}
		fs[f2]++;
		if(valu[f2]>=no[i].valu)
			fs[f2]=0;
	}
	ll ans=0;
	for(int i=1;i<=n;i++)
		if(find(i)==i)
			ans+=fs[i];
	cout<<ans<<"\n";
	return 0;
} 