#include <cstdio>
using namespace std;
const int MAXN = 100005;
namespace sgt {
int val[MAXN << 6], sz[MAXN << 6], ls[MAXN << 6], rs[MAXN << 6], tot;
void build(int &rt, int l, int r) {
rt = ++tot; if (l == r) return val[rt] = l, sz[rt] = 1, void(); int mid = (l + r) >> 1;
build(ls[rt], l, mid); build(rs[rt], mid + 1, r);
}
void modify(int rt0, int &rt, int l, int r, int x, int w) {
rt = ++tot; val[rt] = val[rt0]; sz[rt] = sz[rt0]; ls[rt] = ls[rt0]; rs[rt] = rs[rt0];
if (l == r) return val[rt] = w, void(); int mid = (l + r) >> 1;
if (x <= mid) modify(ls[rt0], ls[rt], l, mid, x, w);
else modify(rs[rt0], rs[rt], mid + 1, r, x, w);
}
void modify2(int rt0, int &rt, int l, int r, int x, int w) {
rt = ++tot; val[rt] = val[rt0]; sz[rt] = sz[rt0]; ls[rt] = ls[rt0]; rs[rt] = rs[rt0];
if (l == r) return sz[rt] = w, void(); int mid = (l + r) >> 1;
if (x <= mid) modify2(ls[rt0], ls[rt], l, mid, x, w);
else modify2(rs[rt0], rs[rt], mid + 1, r, x, w);
}
int query(int rt, int l, int r, int x) {
if (l == r) return val[rt]; int mid = (l + r) >> 1; return x <= mid ? query(ls[rt], l, mid, x) : query(rs[rt], mid + 1, r, x);
}
int query2(int rt, int l, int r, int x) {
if (l == r) return sz[rt]; int mid = (l + r) >> 1; return x <= mid ? query2(ls[rt], l, mid, x) : query2(rs[rt], mid + 1, r, x);
}
}
int lrt[MAXN << 1], n; int findfa(int a, int v) {
int f = sgt::query(lrt[v], 1, n, a);
return f == a ? a : findfa(f, v);
}
int main() {
int m; scanf("%d %d", &n, &m); sgt::build(lrt[0], 1, n);
for (int i = 1; i <= m; i++) {
int op, x, y; scanf("%d %d", &op, &x);
if (op == 1) {
scanf("%d", &y); x = findfa(x, i - 1), y = findfa(y, i - 1); int szx = sgt::query2(lrt[i - 1], 1, n, x), szy = sgt::query2(lrt[i - 1], 1, n, y);
if (x == y) {lrt[i] = lrt[i - 1]; continue;}
if (szx < szy) sgt::modify2(lrt[i - 1], lrt[i], 1, n, y, szx + szy), sgt::modify(lrt[i], lrt[i], 1, n, x, y);
else sgt::modify2(lrt[i - 1], lrt[i], 1, n, x, szx + szy), sgt::modify(lrt[i], lrt[i], 1, n, y, x);
}
if (op == 2) lrt[i] = lrt[x];
if (op == 3){
lrt[i] = lrt[i - 1];
scanf("%d", &y); x = findfa(x, i - 1), y = findfa(y, i - 1); if (x == y) puts("1"); else puts("0");
}
}
}