
"""

https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e

辺の重み <= 連結成分の頂点の重みの総和
となる必要がある

辺を取り除くと、連結成分の重みの総和はちいさくなる
→大きい辺は自身を取り除くことでしか条件達成できない

つまり、現状で連結成分の総和よりも辺の重みが大きいものを貪欲に取り除けばよい
逆に、くっつけると条件を満たすのをくっつけてくのは？
→ 1-1-1で重みが3の時、むり

貪欲を高速化するしかない

まず、辺を昇順ソート

二分探索して、現在の重み以上の辺をremove
残りをunion-findして、連結成分ごとに分割
→ 辺が1つづつ取り除かれる最悪の場合、O(M**2)になる

基本的に小さい辺が残り、大きいほうから消えていく？
(つまり、残ってる辺に単調性は成り立つか)
→全体でみれば成り立たないが、連結成分で見れば成り立っている

→つまり、時刻さえ正しく求められれば部分永続ufで小さいほうからつけていけばいいことになる
→本当か？結局分離に O(N)かかるのでは…

辺を大きいほうから見て行って、現在の連結成分の大きさが条件を満たしているか調べればいい？
1回目の操作では上から一定数が削られる
→2回目の操作では、各独立成分で上からいくつかが削られる

→大きいほうから見て行って、現在残せるのを後で消さなければいけない事態は起こらない

→つまり、上で残すと決めた辺と小さい辺のufを計算できればいい？
→小さい辺のufは部分永続で楽々

大きい辺は…
小さい辺からくっつけていく過程で考える？
小さい辺から付けていったとき、どこかのタイミングで頂点の重みが超えればいい？
→ちょっと違うけど方針としては良さそう

正確に考えてみる
辺をufした時点で連結成分の重みが辺以上→採用確定 & その連結成分の保留中辺も全て採用
そうでない場合→採用を保留にする
で解けそうだ

保留リストの大きさはufの時に小さいほうを大きいほうに併合でマージテク計算量になる
必要なのは数だけなのでマージも必要なかった

"""

def uf_find(n,p):

    ufl = []

    while p[n] != n:
        ufl.append(n)
        n = p[n]

    for i in ufl:
        p[i] = n

    return n


def uf_union(a,b,p,rank,h,w):

    ap = uf_find(a,p)
    bp = uf_find(b,p)

    if ap == bp:
        return True
    else:

        if rank[ap] > rank[bp]:
            p[bp] = ap
            h[ap] += h[bp]
            w[ap] += w[bp]
        elif rank[ap] < rank[bp]:
            p[ap] = bp
            h[bp] += h[ap]
            w[bp] += w[ap]
        else:
            p[bp] = ap
            rank[ap] += 1
            h[ap] += h[bp]
            w[ap] += w[bp]

        return False

from sys import stdin
N,M = map(int,stdin.readline().split())
X = list(map(int,stdin.readline().split()))

p = [i for i in range(N)]
rank = [0] * N
wait = [0] * N
h = [i for i in X] #頂点の重み合計

YAB = []
for i in range(M):
    A,B,Y = map(int,stdin.readline().split())
    YAB.append((Y,A-1,B-1))
YAB.sort()

for i in range(M):
    Y,A,B = YAB[i]
    uf_union(A,B,p,rank,h,wait)

    np = uf_find(A,p)
    nweight = h[np]
    if nweight >= Y:
        wait[np] = 0
        #print (0,Y,nweight)
    else:
        wait[np] += 1
        #print (1,Y,nweight)

#print (wait)
print (wait[uf_find(0,p)])
