class UnionFind:
    def __init__(self, size):
        self.parent = [-1 for i in range(size)]#非負なら親ノード，負ならグループの要素数
        self.wt = [-1 for i in range(size)]#非負なら親ノード，負ならグループの要素数
        self.maxwt = [-1 for i in range(size)]#非負なら親ノード，負ならグループの要素数
        self.oksize = [0 for i in range(size)]#非負なら親ノード，負ならグループの要素数
        self.esize = [0 for i in range(size)]#非負なら親ノード，負ならグループの要素数

    def root(self, x): #root(x): xの根ノードを返す．
        if self.parent[x] < 0:
            return x
        else:
            self.parent[x] = self.root(self.parent[x]) #xをxの根に直接つなぐ
            return self.parent[x]

    def merge(self, x, y): #merge(x,y): xのいるグループと$y$のいるグループをまとめる
        x = self.root(x)
        y = self.root(y)
        if x == y:
            self.esize[x] += 1
            return False
        if self.parent[x] > self.parent[y]: #xの要素数がyの要素数より「小さい」とき入れ替える
            x,y=y,x
        self.parent[x] += self.parent[y] #xの要素数を更新
        self.parent[y] = x #yをxにつなぐ
        self.wt[x] += self.wt[y]
        self.maxwt[x] = max(self.maxwt[x] , self.maxwt[y])
        self.esize[x] = self.esize[x] + self.esize[y] + 1
        self.oksize[x] = self.oksize[x] + self.oksize[y]
        return True

    def issame(self, x, y): #same(x,y): xとyが同じグループにあるならTrue
        return self.root(x) == self.root(y)
        
    def size(self,x): #size(x): xのいるグループの要素数を返す
        return -self.parent[self.root(x)]

    def w(self,x): #連結成分のおもみ
        return -self.wt[self.root(x)]

n,m=[int(i) for i in input().split()]
X=[int(i) for i in input().split()]

edges=[0 for i in range(m)]
for i in range(m):
    edges[i]=[int(i) for i in input().split()]
    edges[i][0] -= 1
    edges[i][1] -= 1

edges.sort(key=lambda x: x[2])

#print(edges)

uf = UnionFind(n)

uf.wt = X

for edge in edges:
    x0=edge[0]
    x1=edge[1]
#    print(x0,x1,w0,w1)
    uf.merge(x0,x1)
    uf.maxwt[uf.root(x0)] = max(uf.maxwt[uf.root(x0)], edge[2])
#    print(uf.wt,uf.maxwt)
    if uf.wt[x0] >= uf.maxwt[uf.root(x0)]:
        uf.oksize[uf.root(x0)]=uf.esize[uf.root(x0)]
#        print("ok")

#print(uf.oksize,uf.esize)

num=0
for i in range(n):
    if uf.root(i) ==i:
        num += uf.oksize[i]
#print(uf.oksize)
print(m-num)
