#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
vector<vector<pair<int, int>>> g;
vector<pair<int, pair<int, int>>> edg;
int cp[100010];
int find(int x) { return cp[x] = cp[x] == x ? x : find(cp[x]); }
void union_(int x, int y) { cp[find(x)] = find(y); }
int h[100010];
int anc[100010][18];
int val[100010][18];
void dfs_preprocess(int u, int p = -1) {
  anc[u][0] = p;
  if (~p) {
    h[u] = h[p] + 1;
  }
  for (int i = 1; i < 18; ++i) {
    if (~anc[u][i - 1]) {
      anc[u][i] = anc[anc[u][i - 1]][i - 1];
      val[u][i] = max(val[anc[u][i - 1]][i - 1], val[u][i - 1]);
    }
  }
  for (auto v : g[u]) {
    if (v.second != p) {
      val[v.second][0] = v.first;
      dfs_preprocess(v.second, u);
    }
  }
}
int LCA(int v, int u) {
  if (h[v] < h[u]) swap(u, v);
  int val_ans = 0;
  for (int i = 18 - 1; i >= 0; --i) {
    if (anc[v][i] + 1 && h[anc[v][i]] >= h[u]) {
      val_ans = max(val_ans, val[v][i]);
      v = anc[v][i];
    }
  }
  if (v == u) return val_ans;
  for (int i = 18 - 1; i >= 0; --i) {
    if (anc[v][i] != anc[u][i]) {
      val_ans = max({val_ans, val[v][i], val[u][i]});
      v = anc[v][i];
      u = anc[u][i];
    }
  }
  val_ans = max({val_ans, val[v][0], val[u][0]});
  return val_ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; ++i) cp[i] = i;
  g.assign(n, vector<pair<int, int>>());
  map<pair<int, int>, int> mp;
  int id = 0;
  for (int i = 0; i < m; ++i) {
    int u, v, w;
    cin >> u >> v >> w;
    u--, v--;
    mp[{u, v}] = id++;
    edg.push_back({w, {u, v}});
  }
  sort((edg).begin(), (edg).end());
  vector<int> mst(m, 0);
  memset(anc, -1, sizeof(anc));
  for (int i = 0; i < m; ++i) {
    int u = edg[i].second.first, v = edg[i].second.second, w = edg[i].first;
    if (find(u) != find(v)) {
      union_(u, v);
      g[u].push_back({w, v});
      g[v].push_back({w, u});
      mst[i] = 1;
    }
  }
  dfs_preprocess(0);
  vector<int> ans(m, -1);
  for (int i = 0; i < m; ++i) {
    if (!mst[i]) {
      ans[mp[edg[i].second]] = LCA(edg[i].second.first, edg[i].second.second);
    }
  }
  for (int u : ans) {
    if (u + 1) cout << u << "\n";
  }
}
