N, M = map(int, input().split())

graph = [[float('infinity') for _ in range(N + 1)] for _ in range(N + 1)]
for _ in range(M):
    a, b, c = map(int, input().split())
    graph[a][b] = c
    graph[b][c] = c
ans = 0
# 頂点g -> 頂点vへのコストを計算する。直接のpathが最小なら、カウントしない。
# そうでなければ、他の経路があるので、カウントする。
for g in range(1, len(graph)):
    for v in range(1, N + 1):
        if g == v:
            continue
        paths = graph[g]
        direct = paths[v]
        if direct == float('infinity'):
            continue
        min_path = float('infinity')
        for i in range(len(paths)):
            p = paths[i]
            cost = p + graph[i][v]
            if min_path > cost:
                min_path = cost
        if direct > min_path:
            ans += 1
print(ans)
