voidsolve(){ int n, m; cin >> n >> m; vector<array<int, 3>> edg(m + 1); for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; edg[i] = {w, u, v}; } int q; cin >> q; vector<vector<pii>> qv(n + 1); for (int i = 1; i <= q; i++) { int u, v; cin >> u >> v; qv[u].push_back({v, i}); qv[v].push_back({u, i}); } sort(edg.begin() + 1, edg.end(), [](auto i, auto j) { return i[0] > j[0]; }); DSU dsu(n); vector<int> ans(q + 1, -1); deb(edg); for (int i = 1; i <= n; i++) deb(i, qv[i]); for (int i = 1; i <= m; i++) { auto [w, u, v] = edg[i]; deb(w, u, v); u = dsu.find(u), v = dsu.find(v); deb(u, v); if (u == v) { continue; } else { if (qv[v].size() > qv[u].size()) { swap(u, v); } deb(v, qv[v]); for (auto [nx, id] : qv[v]) { deb(v, nx, id); deb(ans[id]); if (ans[id] > 0) continue; if (dsu.find(nx) == u) ans[id] = w; else qv[u].push_back({nx, id}); } dsu.merge(u, v); } } for (int i = 1; i <= q; i++) cout << ans[i] << endl; }