#include<bits/stdc++.h>
#define maxl 100010

using namespace std;

int n,m,ans;
int a[maxl];
struct ed
{
	int u,v,val;
}e[maxl];
int f[maxl],cnt[maxl];
long long sum[maxl];

inline bool cmp(const ed &x,const ed &y)
{
	return x.val<y.val;
}

inline void prework()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		f[i]=i;cnt[i]=0;sum[i]=a[i];
	}
	for(int i=1;i<=m;i++)
		scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].val);
	sort(e+1,e+1+m,cmp);
}

inline int find(int x)
{
	if(f[x]!=x)
	{
		f[x]=find(f[x]);
		cnt[f[x]]+=cnt[x];
		sum[f[x]]+=cnt[x];
		sum[x]=cnt[x]=0;
	}
	return f[x];
}

inline void mainwork()
{
	int x,y,xx,yy;
	for(int i=1;i<=m;i++)
	{
		x=e[i].u;y=e[i].v;
		xx=find(x);yy=find(y);
		if(xx!=yy)
		{
			cnt[xx]+=cnt[yy]+1;
			sum[xx]+=sum[yy];
			f[yy]=xx;
			sum[yy]=0;cnt[yy]=0;
			if(sum[xx]>=e[i].val)
			{
				ans+=cnt[xx];
				cnt[xx]=0;
			}
		}
		else
		{
			cnt[xx]++;
			if(sum[xx]>=e[i].val)
			{
				ans+=cnt[xx];
				cnt[xx]=0; 
			}
		}
	}
}

inline void print()
{
	printf("%d",m-ans);
}

int main()
{
	prework();
	mainwork();
	print();
	return 0;
}
