#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
using ll = long long;
int d[101][101];
int f[101][101];
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = (0), i_len = (n); i < i_len; ++i)
    for (int j = (0), j_len = (n); j < j_len; ++j) {
      d[i][j] = (1 << 26);
    }
  for (int i = (0), i_len = (m); i < i_len; ++i) {
    int a, b, c;
    cin >> a >> b >> c;
    a--;
    b--;
    d[a][b] = c;
    d[b][a] = c;
    f[a][b] = f[b][a] = 1;
  }
  int cnt1 = 0;
  for (int i = (0), i_len = (n); i < i_len; ++i)
    for (int j = (0), j_len = (n); j < j_len; ++j)
      if (f[i][j]) cnt1++;
  int cnt2 = 0;
  for (int k = (0), k_len = (n); k < k_len; ++k)
    for (int i = (0), i_len = (n); i < i_len; ++i)
      for (int j = (0), j_len = (n); j < j_len; ++j) {
        if (d[i][j] >= d[i][k] + d[k][j]) {
          d[i][j] = d[i][k] + d[k][j];
          f[i][j] = 0;
        }
      }
  for (int i = (0), i_len = (n); i < i_len; ++i)
    for (int j = (0), j_len = (n); j < j_len; ++j)
      if (f[i][j]) cnt2++;
  cout << (cnt1 - cnt2) / 2 << endl;
  return 0;
}
