#include<bits/stdc++.h>
using namespace std;
const int N=100000+10;
int n,m,fa[N],cnt[N];
long long w[N];
struct edge{
	int x,y;
	long long v;
	bool operator < (const edge &rhs) const {
		return v<rhs.v;
	}
}e[N];

int getfa(int x) {
	if (x==fa[x]) return x;
	int f=getfa(fa[x]);
	cnt[f]+=cnt[x]; cnt[x]=0;
	w[f]+=w[x]; w[x]=0;
	return fa[x]=f;
}

int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++) scanf("%lld",&w[i]);
	for (int i=1;i<=m;i++) scanf("%d%d%lld",&e[i].x,&e[i].y,&e[i].v);
	
	for (int i=1;i<=n;i++) {
		cnt[i]=0; fa[i]=i;
	}
	
	sort(e+1,e+m+1);
	int ans=0;
	for (int i=1;i<=m;i++) {
		int fx=getfa(e[i].x),fy=getfa(e[i].y);
		if (fx!=fy) {
			fa[fx]=fa[fy];
			cnt[fy]+=cnt[fx]+1; cnt[fx]=0;
			w[fy]+=w[fx]; w[fx]=0;
		} else cnt[fx]++;
		if (w[fy]>=e[i].v) {
			ans+=cnt[fy];
			cnt[fy]=0;
		}
	}
	cout<<m-ans;
	return 0;
}