#include<iostream>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long int LL;
LL x[100005];
LL y[100005][3];
vector<pair<int,int> > v1;
LL s[100005];
LL p[100005];
LL pn[100005];
queue<int> q1;

int parent(int a){
	int b,c;
	if(p[a]==-1){
		while(!q1.empty()){
			b=q1.front(),q1.pop();
			p[b]=a;
		}
		return a;
	}
	q1.push(a);
	return parent(p[a]);
}

int main(){
	int n,m;
	int i,j,k;
	LL a,b,c,d;
	LL ss=0;
	memset(p,-1,sizeof(p));
	cin>>n>>m;
	for(i=0;i<n;i++){
		cin>>x[i];
	}
	for(i=0;i<m;i++){
		cin>>y[i][0]>>y[i][1]>>y[i][2];
		y[i][0]--,y[i][1]--;
		v1.push_back(make_pair(y[i][2],i));
	}
	sort(v1.begin(),v1.end());
	for(i=0;i<m;i++){
		a=v1[i].first,b=v1[i].second;
		c=parent(y[b][0]),d=parent(y[b][1]);
		if(c==d){
			if(x[c]>=a)s[c]++;
			pn[c]++;
		}else{
			p[d]=c;
			s[c]+=s[d],s[d]=0;
			x[c]+=x[d],pn[c]+=pn[d]+1;
			if(x[c]>=a)s[c]=pn[c];
		}
	}
	for(i=0;i<n;i++){
		ss+=s[i];
	}
	ss=m-ss;
	cout<<ss<<endl;
	return 0;
}
			
	
