#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m, f[N], vis[N], cnt;
int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); }
struct node {
  int x, y, w;
} a[N];
bool cmp(node a, node b) { return a.w < b.w; }
int main() {
  while (cin >> n >> m) {
    int ans = 0;
    for (int i = 1; i <= n; i++) f[i] = i;
    for (int i = 1; i <= m; i++) {
      int x, y, k;
      cin >> x >> y >> k;
      a[i].x = x;
      a[i].y = y;
      a[i].w = k;
    }
    sort(a + 1, a + 1 + m, cmp);
    int mx = 0;
    for (int i = 1; i <= m;) {
      int j = i;
      while (a[i].w == a[j].w) j++;
      cnt = 0;
      for (int k = i; k < j; k++)
        if (find(a[k].x) != find(a[k].y)) cnt++;
      for (int k = i; k < j; k++) {
        if (find(a[k].x) != find(a[k].y)) {
          f[find(a[k].x)] = find(a[k].y);
          cnt--;
        }
      }
      ans += cnt;
      i = j;
    }
    cout << ans << endl;
  }
}
