import numpy as np
from collections import *
d=defaultdict(list)
n,m=map(int,input().split())

for s in range(m):
    a,b,c=map(int,input().split())
    d[a].append([b,c])
    d[b].append([a,c])
#print(d.keys())

#defaultdict(<class 'list'>, {1: [[2, 1], [3, 1]], 2: [[1, 1], [3, 3]], 3: [[1, 1], [2, 3]]})

def DIJKSTRA(point,d):
    cost      = {node:np.inf for node in d.keys()}
    preference= {node:  None for node in d.keys()}#最適路のこと
    Q         = set(d.keys())  #頂点のリスト
    cost[point]=0  #開始地点のコストをゼロとする（当たり前
    while True:
        prefnd=min(Q, key=lambda c:cost[c]) #最適な点探し
        Q.remove(prefnd)  #最適だった点を削除
   #     del Q[prefnd]
        if len(Q)==0:
            break #全部の点消したら終了
        for pathcost in d[prefnd]:  #次の点とそこまでのコスト
            tempcost=cost[prefnd]+pathcost[1]  #スタートからそこまでのコストを計算
            if tempcost<cost[pathcost[0]]:   #計算してみたコストがそこに行くまでの最小値ならば
                cost[pathcost[0]]=tempcost #最小値更新
                preference[pathcost[0]]=prefnd
    return len(preference)
        
print(m-DIJKSTRA(1,d)+1)