#include <bits/stdc++.h>
using namespace std ;
#define MAX 1000001

struct query
{
    int u, v, w ;
}q[MAX] = {};

int fa[MAX] = {} ;
int cnt[MAX] = {} ;
long long w[MAX] = {} ;
bool cmp(query a, query b)
{
    return a.w < b.w ;
}

int xfind(int x)
{
    return (fa[x] == x) ? x : fa[x] = xfind(fa[x]) ;
}

int main()
{
    int n, m ;
    int ans = 0 ;
    cin >> n >> m ;
    for(int i=0; i<n; i++)
    {
        cin >> w[i] ; fa[i] = i ;
    }
    for(int i=0; i<m; i++)
    {
        cin >> q[i].u >> q[i].v >> q[i].w ;
        q[i].u--, q[i].v-- ;
    }
    sort(q,q+m,cmp) ;
    for(int i=0; i<m; i++)
    {
        int x = xfind(q[i].u) ;
        int y = xfind(q[i].v) ;
        if(x != y)
        {
            w[x] += w[y] ;
            cnt[x] += cnt[y] ;
            w[y] = 0, cnt[y] = 0 ;
            fa[y] = x ;
        }
        cnt[x]++ ;
        if(w[x] >= q[i].w)
        {
            ans += cnt[x] ;
            cnt[x] = 0 ;
        }
    }
    cout << m - ans << '\n' ;
    return 0 ;
}
