#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vii = vector<ii>;
template <typename T>
bool ckmin(T& a, T b) {
  return (b < a) ? a = b, 1 : 0;
}
template <typename T>
bool ckmax(T& a, T b) {
  return (b > a) ? a = b, 1 : 0;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template <typename U, typename V>
string to_string(pair<U, V>);
string to_string(string& e) { return "\"" + e + "\""; }
string to_string(char e) { return "\'" + string(1, e) + "\'"; }
string to_string(bool e) { return e ? "true" : "false"; }
template <typename T>
string to_string(T e) {
  string s = "[ ";
  for (auto& x : e) s += to_string(x) + " ";
  return s + "]";
}
template <typename U, typename V>
string to_string(pair<U, V> e) {
  return "(" + to_string(e.first) + ", " + to_string(e.second) + ")";
}
void dbg_str() { ; }
template <typename U, typename... V>
void dbg_str(U u, V... v) {
  ;
  dbg_str(v...);
}
using iii = tuple<int, int, int>;
const int N = 110;
const int INF = (int)1e9;
int sp[N][N], n, m;
vector<iii> edges;
bool check(int k) {
  int a = get<0>(edges[k]), b = get<1>(edges[k]), w = get<2>(edges[k]);
  for (int i = int(0); i < int(n); i++)
    for (int j = int(0); j < int(n); j++)
      if (i != j) {
        if (sp[i][a] + w + sp[b][j] == sp[i][j]) return false;
      }
  return true;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  int a, b, c;
  for (int i = int(0); i < int(n); i++)
    for (int j = int(0); j < int(n); j++) sp[i][j] = INF;
  for (int i = int(0); i < int(m); i++) {
    cin >> a >> b >> c;
    a--;
    b--;
    sp[a][b] = sp[b][a] = c;
    edges.push_back({a, b, c});
  }
  for (int i = int(0); i < int(n); i++) sp[i][i] = 0;
  for (int k = int(0); k < int(n); k++)
    for (int i = int(0); i < int(n); i++)
      for (int j = int(0); j < int(n); j++)
        ckmin(sp[i][j], sp[i][k] + sp[k][j]);
  int ans = 0;
  for (int i = int(0); i < int(m); i++) {
    int x = check(i);
    ans += x;
  }
  cout << ans << '\n';
}
