#include <bits/stdc++.h>
using namespace std;
class Point {
 public:
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
  Point operator+(Point p) { return Point(x + p.x, y + p.y); }
  Point operator-(Point p) { return Point(x - p.x, y - p.y); }
  Point operator*(double a) { return Point(x * a, y * a); }
  Point operator/(double a) { return Point(x / a, y / a); }
  double absv() { return sqrt(norm()); }
  double norm() { return x * x + y * y; }
  bool operator<(const Point &p) const { return x != p.x ? x < p.x : y < p.y; }
  bool operator==(const Point &p) const {
    return fabs(x - p.x) < (1e-10) && fabs(y - p.y) < (1e-10);
  }
};
struct Segment {
  Point p1, p2;
};
double hen(Point a) {
  if (fabs(a.x) < (1e-10) && a.y > 0)
    return acos(0);
  else if (fabs(a.x) < (1e-10) && a.y < 0)
    return 3 * acos(0);
  else if (fabs(a.y) < (1e-10) && a.x < 0)
    return 2 * acos(0);
  else if (fabs(a.y) < (1e-10) && a.x > 0)
    return 0.0;
  else if (a.y > 0)
    return acos(a.x / a.absv());
  else
    return 2 * acos(0) + acos(-a.x / a.absv());
}
string itos(int i) {
  ostringstream s;
  s << i;
  return s.str();
}
int gcd(int v, int b) {
  if (v > b) return gcd(b, v);
  if (v == b) return b;
  if (b % v == 0) return v;
  return gcd(v, b % v);
}
double dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double distans(double x1, double y1, double x2, double y2) {
  double rr = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
  return sqrt(rr);
}
int inf = 1000000007 * 2;
int n, k;
int a[1001][101][101] = {0};
signed main() {
  for (int i = 0; i < 1001; i++)
    for (int j = 0; j <= 100; j++)
      for (int k = 0; k <= 100; k++) {
        a[i][j][k] = 1000000007;
        if (j == k) a[i][j][k] = 0;
      }
  cin >> n;
  int m;
  cin >> m;
  for (int i = 1; i <= m; i++) {
    int a1, a2, a3;
    cin >> a1 >> a2 >> a3;
    for (int j = 0; j <= m; j++) {
      if (i == j) continue;
      a[j][a2][a1] = a3;
      a[j][a1][a2] = a3;
    }
  }
  for (int i = 0; i <= m; i++) {
    for (int j = 1; j <= n; j++)
      for (int k = 1; k <= n; k++)
        for (int l = 1; l <= n; l++) {
          a[i][k][l] = min(a[i][k][l], a[i][k][j] + a[i][j][l]);
        }
  }
  int ans = 0;
  for (int i = 1; i <= m; i++) {
    bool b = true;
    for (int j = 1; j <= n; j++)
      for (int k = 1; k <= n; k++) {
        if (a[0][j][k] != a[i][j][k]) b = false;
      }
    if (b) ans++;
  }
  cout << ans << endl;
  return 0;
}
