#include #include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int N, Q; cin >> N >> Q; atcoder::dsu uf(N); map> groups; for(int i = 0; i < N; i++) groups[i] = {i}; while(Q--) { int t; cin >> t; if(t == 1) { int u, v; cin >> u >> v; u = uf.leader(u - 1); v = uf.leader(v - 1); if(u == v) continue; if(uf.merge(u, v) == v) swap(u, v); vector& U = groups[u], & V = groups[v]; U.insert(U.end(), V.begin(), V.end()); groups.erase(v); } else { int u; cin >> u; u = uf.leader(u - 1); if(uf.size(u) == N) { cout << "-1\n"; continue; } auto p = groups.find(u); if(++p == groups.end()) p = groups.begin(); cout << p->second[0] + 1 << '\n'; } } }