#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 * 1000 + 10, maxm = 1 * 1000 * 1000 + 10;
int n, m, p[maxn], e[maxm][2], w, u, v;
vector<int> s[maxn];
pair<int, int> a[maxm];
bool mark[maxm];
vector<pair<int, int>> ans, ed[maxn];
int main() {
  ios::sync_with_stdio(0);
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    p[i] = i;
    s[i].push_back(i);
  }
  for (int i = 0; i < m; i++) {
    scanf("%d%d%d", &e[i][0], &e[i][1], &w);
    e[i][0]--;
    e[i][1]--;
    ed[e[i][0]].push_back({e[i][1], i});
    ed[e[i][1]].push_back({e[i][0], i});
    a[i] = {w, i};
  }
  sort(a, a + m);
  for (int i = 0; i < m; i++) {
    u = e[a[i].second][0];
    v = e[a[i].second][1];
    u = p[u];
    v = p[v];
    if (u == v) continue;
    mark[a[i].second] = 1;
    if ((((int)s[u].size())) > (((int)s[v].size()))) swap(u, v);
    for (auto x : ed[u]) {
      if (mark[x.second]) continue;
      if (p[x.first] == u) continue;
      if (p[x.first] == v) {
        mark[x.second] = 1;
        ans.push_back({x.second, a[i].first});
        continue;
      }
      ed[v].push_back({p[x.first], x.second});
    }
    for (int j = 0; j < (((int)s[u].size())); j++) {
      w = s[u][j];
      p[w] = v;
      s[v].push_back(w);
    }
  }
  for (int i = 0; i < m; i++) {
    if (!mark[i]) ans.push_back({i, 1000000000});
  }
  sort(ans.begin(), ans.end());
  for (int i = 0; i < (((int)ans.size())); i++) printf("%d\n", ans[i].second);
  return 0;
}
