#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 6;
int n, m, fa[N], dep[N];
vector<int> G[N], W[N];
bool vis[N];
int ans[N];
int find(int u) { return fa[u] == u ? fa[u] : fa[u] = find(fa[u]); }
bool unifa(int u, int v) {
  if (find(u) == find(v)) {
    return 0;
  }
  fa[find(v)] = find(u);
  return 1;
}
struct edge {
  int u, v, w, id;
  edge(int ru = 0, int rv = 0, int rw = 0, int ri = 0) {
    u = ru;
    v = rv;
    w = rw;
    id = ri;
  }
  bool operator<(const edge& rhs) const { return w < rhs.w; }
} e[N];
void addedge(int u, int v, int w) {
  G[u].push_back(v);
  W[u].push_back(w);
}
int jump[N][18], mx[N][18];
void dfs(int u, int fr) {
  for (int i = 0, v; i < (int)G[u].size(); i++) {
    v = G[u][i];
    if (v == fr) {
      continue;
    }
    dep[v] = dep[u] + 1;
    jump[v][0] = u;
    mx[v][0] = W[u][i];
    for (int j = 1; j < 18; j++) {
      jump[v][j] = jump[jump[v][j - 1]][j - 1];
      mx[v][j] = max(mx[v][j - 1], mx[jump[v][j - 1]][j - 1]);
    }
    dfs(v, u);
  }
}
pair<int, int> lca(int u, int v) {
  int rep = 0;
  if (dep[u] < dep[v]) {
    swap(u, v);
  }
  for (int i = 17; ~i; i--) {
    if (dep[jump[u][i]] >= dep[v]) {
      rep = max(mx[u][i], rep);
      u = jump[u][i];
    }
  }
  if (u == v) {
    return make_pair(u, rep);
  }
  for (int i = 17; ~i; i--) {
    if (jump[u][i] != jump[v][i]) {
      rep = max(rep, max(mx[u][i], mx[v][i]));
      u = jump[u][i];
      v = jump[v][i];
    }
  }
  rep = max(rep, max(mx[u][0], mx[v][0]));
  return make_pair(jump[u][0], rep);
}
int query(int u, int v) { return lca(u, v).second; }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, u, v, w; i <= m; i++) {
    scanf("%d%d%d", &u, &v, &w);
    e[i] = edge(u, v, w, i);
  }
  for (int i = 1; i <= n; i++) {
    fa[i] = i;
  }
  sort(e + 1, e + m + 1);
  for (int i = 1; i <= m; i++) {
    if (unifa(e[i].u, e[i].v)) {
      vis[e[i].id] = 1;
      addedge(e[i].u, e[i].v, e[i].w);
      addedge(e[i].v, e[i].u, e[i].w);
    }
  }
  dep[1] = 1;
  dfs(1, 0);
  for (int i = 1; i <= m; i++) {
    if (!vis[e[i].id]) {
      ans[e[i].id] = query(e[i].u, e[i].v);
    }
  }
  for (int i = 1; i <= m; i++) {
    if (!vis[i]) {
      printf("%d\n", ans[i]);
    }
  }
  return 0;
}
