#include <stdio.h>
const int M=6e5+5, N=9e5+9;
int n, m, i, j, k, x, y, a, b, f[N], s[N];
int find(int x){
if(f[x] > M) return x;
return f[x] = find(f[x]);
}
int main(){
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++){
f[i] = i+M, s[i+M] = i;
}
while(m--){
scanf("%d%d", &k, &x);
if(k == 1){
scanf("%d", &y);
a = s[x+M], b = s[y+M];
if(!b) continue;
if(!a) f[b] = x+M, s[x+M] = b;
else f[b] = a;
s[y+M] = 0;
}
else if(k == 2){
if(s[x+M]) f[++n] = s[x+M];
else f[++n] = x+M, s[x+M] = n;
}
else printf("%d\n", f[find(x)]-M);
}
return 0;
}