#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
struct node{
int ls, rs, ans;
}tree[maxn << 6];
int n, m, tot, rtf[maxn], rtd[maxn];
inline int read(){
int s = 0, w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
return s * w;
}
int Build(int l, int r){
int root = ++tot;
if(l == r) return root;
int mid = (l + r) >> 1;
tree[root].ls = Build(l, mid);
tree[root].rs = Build(mid + 1, r);
return root;
}
int UpDate(int root, int l, int r, int vis, int pos){
int c = ++tot;
tree[c].ls = tree[root].ls;
tree[c].rs = tree[root].rs;
if(l == r){
tree[c].ans = pos;
return c;
}
int mid = (l + r) >> 1;
if(vis <= mid) tree[c].ls = UpDate(tree[c].ls, l, mid, vis, pos);
else tree[c].rs = UpDate(tree[c].rs, mid + 1, r, vis, pos);
return c;
}
int Query(int root, int l, int r, int vis){
if(l == r) return tree[root].ans;
int mid = (l + r) >> 1;
if(vis <= mid) return Query(tree[root].ls, l, mid, vis);
else return Query(tree[root].rs, mid + 1, r, vis);
}
int gf(int x, int k){
int ans = Query(rtf[k], 1, n, x);
return ans == 0 ? x : gf(ans, k);
}
bool judge(int u, int v, int k){
return gf(u, k) == gf(v, k);
}
void mark(int u, int v, int k){
u = gf(u, k), v = gf(v, k);
if(u != v){
int du = Query(rtd[k], 1, n, u);
int dv = Query(rtd[k], 1, n, v);
if(du <= dv){
rtf[k + 1] = UpDate(rtf[k], 1, n, u, v);
rtd[k + 1] = UpDate(rtd[k], 1, n, v, max(dv, du + 1));
}
else{
rtf[k + 1] = UpDate(rtf[k], 1, n, v, u);
rtd[k + 1] = UpDate(rtd[k], 1, n, u, max(du, dv + 1));
}
}
else{
rtf[k + 1] = rtf[k];
rtd[k + 1] = rtd[k];
}
}
int main(){
int op, u, v, k;
n = read(), m = read();
rtf[0] = Build(1, n);
rtd[0] = Build(1, n);
for(int i = 1; i <= m; i++){
op = read();
if(op == 2){
k = read();
rtf[i] = rtf[k];
rtd[i] = rtd[k];
}
else if(op == 1){
u = read(), v = read();
mark(u, v, i - 1);
}
else{
u = read(), v = read();
if(judge(u, v, i - 1)) printf("1\n");
else printf("0\n");
rtf[i] = rtf[i - 1];
rtd[i] = rtd[i - 1];
}
}
return 0;
}