#include <bits/stdc++.h>
using namespace std;
int min(int x, int y) {
  if (y < x)
    return y;
  else
    return x;
}
int max(int x, int y) {
  if (y > x)
    return y;
  else
    return x;
}
int fact(int x) {
  int i = 1;
  for (int j = 0; j < ((int)x); j++) {
    i *= (j + 1);
  }
  return i;
}
int mfact(int x) {
  int i = 1;
  for (int j = 0; j < ((int)x); j++) {
    i *= (j + 1);
  }
  return i % 1000000007;
}
int modulo(int x) { return x % 1000000007; }
long long fact(long long x) {
  long long i = 1;
  for (int j = 0; j < ((int)x); j++) {
    i *= (j + 1);
  }
  return i;
}
long long mfact(long long x) {
  long long i = 1;
  for (int j = 0; j < ((int)x); j++) {
    i *= (j + 1);
  }
  return i % 1000000007;
}
long long modulo(long long x) { return x % 1000000007; }
int gcd(int x, int y) {
  if (x % y == 0)
    return y;
  else if (y % x == 0)
    return x;
  else
    return gcd(x % y, y % x);
}
long long gcd(long long x, long long y) {
  if (x % y == 0)
    return y;
  else if (y % x == 0)
    return x;
  else
    return gcd(x % y, y % x);
}
void say(bool x) {
  if (x) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
  return;
}
int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int main() {
  int n, m;
  cin >> n >> m;
  int dd[n][n];
  for (int i = 0; i < ((int)n); i++) {
    for (int j = 0; j < ((int)n); j++) {
      if (i == j) {
        dd[i][j] = 0;
      } else {
        dd[i][j] = (1 << 29);
      }
    }
  }
  struct edge {
    int a, b, c;
  };
  edge ed[m];
  for (int i = 0; i < ((int)m); i++) {
    cin >> ed[i].a >> ed[i].b >> ed[i].c;
    dd[--ed[i].a][--ed[i].b] = ed[i].c;
    dd[ed[i].b][ed[i].a] = ed[i].c;
  }
  int d;
  for (int i = 0; i < ((int)n); i++) {
    for (int j = 0; j < ((int)n); j++) {
      for (int k = 0; k < ((int)n); k++) {
        d = min(dd[i][j], dd[i][k] + dd[k][j]);
        dd[i][j] = d;
        dd[j][i] = d;
      }
    }
  }
  int ans = m;
  for (int i = 0; i < ((int)m); i++) {
    if (ed[i].c == dd[ed[i].a][ed[i].b]) {
      ans--;
    }
  }
  cout << ans << endl;
  return 0;
}
