#include <bits/stdc++.h>
using namespace std;
int N, M;
int a[1010], b[1010], c[1010];
int ab[110][110], no_need[110][110];
int dik(int k) {
  int now = k;
  int dis[110] = {};
  int det[110] = {};
  int prev[110] = {};
  for (int i = 0; i < N + 1; i++) {
    dis[i] = 1001;
  }
  dis[k] = 0;
  det[k] = 1;
  for (int l = 1; l < N; l++) {
    for (int i = 1; i < N + 1; i++) {
      if (det[i] == 0 && dis[now] + ab[now][i] < dis[i]) {
        dis[i] = dis[now] + ab[now][i];
        prev[i] = now;
      }
    }
    now = 0;
    for (int i = 1; i < N + 1; i++) {
      if (det[i] == 0) {
        if (dis[i] < dis[now]) now = i;
      }
    }
    det[now] = 1;
    no_need[now][prev[now]] = 0;
    no_need[prev[now]][now] = 0;
  }
  return 0;
}
int solve() {
  int ans = 0;
  for (int i = 1; i < N + 1; i++) {
    dik(i);
  }
  for (int i = 1; i < N + 1; i++) {
    for (int j = i + 1; j < N + 1; j++) {
      ans += no_need[i][j];
    }
  }
  cout << ans << endl;
  return 0;
}
int main() {
  cin >> N >> M;
  for (int i = 0; i < M; i++) {
    cin >> a[i] >> b[i] >> c[i];
    ab[a[i]][b[i]] = c[i];
    ab[b[i]][a[i]] = c[i];
    no_need[a[i]][b[i]] = 1;
  }
  solve();
  return 0;
}
