#include <bits/stdc++.h>
using namespace std;
long long int n, m;
struct edge {
  long long int to, cost;
};
vector<vector<edge> > vec;
vector<long long int> f;
void dfs(long long int c, long long int p, long long int cos) {
  if (f[c] > cos) f[c] = cos;
  for (int i = 0; i < vec[c].size(); i++) {
    if (vec[c][i].to != p && f[vec[c][i].to] == 1ll << 60) {
      dfs(vec[c][i].to, c, cos + vec[c][i].cost);
    }
  }
}
int main() {
  cin >> n >> m;
  vec.resize(n);
  f.resize(n);
  int a, b, c;
  edge e1, e2;
  for (int i = 0; i < m; i++) {
    cin >> a >> b >> c;
    a--;
    b--;
    e1.to = b;
    e1.cost = c;
    e2.to = a;
    e2.cost = c;
    vec[a].push_back(e1);
    vec[b].push_back(e2);
  }
  long long int ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) f[j] = 1ll << 60;
    dfs(i, -1, 0);
    for (int j = 0; j < vec[i].size(); j++) {
      if (vec[i][j].cost > f[vec[i][j].to]) {
        ans++;
      }
    }
  }
  cout << ans / 2 << endl;
  return 0;
}
