#include using namespace std; using ll = long long; using pll = pair; #define drep(i, cc, n) for (ll i = (cc); i <= (n); ++i) #define rep(i, n) drep(i, 0, n - 1) #define all(a) (a).begin(), (a).end() #define pb push_back #define fi first #define se second mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count()); const ll MOD1000000007 = 1000000007; const ll MOD998244353 = 998244353; const ll MOD[3] = {999727999, 1070777777, 1000000007}; const ll LINF = 1LL << 60LL; const int IINF = (1 << 30) - 1; struct union_find{ vector par; vector siz; union_find(int n) : par(n), siz(n, 1){ for(int i=0; i> n >> q; union_find uf(n); set st; rep(i, n) st.insert(i); while(q--){ ll type; cin >> type; if(type==1){ ll u, v; cin >> u >> v; u--; v--; if(!uf.same(u, v)){ ll ru = uf.root(u); ll rv = uf.root(v); uf.unite(ru, rv); if(uf.root(ru)==ru){ st.erase(rv); }else{ st.erase(ru); } } } if(type==2){ ll v; cin >> v; v--; ll r = uf.root(v); if(uf.size(v)==n){ cout << -1 << '\n'; }else{ if(*st.begin() == r){ cout << *st.rbegin()+1 << '\n'; }else{ cout << *st.begin()+1 << '\n'; } } } } } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int T=1; //cin >> T; while(T--) solve(); }