#include <bits/stdc++.h>

using namespace std;

int timer = 0;

int Parent[200000], Rank[200000];
pair<int, int> Ops[200000];

int Find(int a) {
    while(Parent[a]) a = Parent[a];
    return a;
}

void Union(int a, int b) {
    timer += 1;
    a = Find(a);
    b = Find(b);

    if(a == b) {
        Ops[timer] = {0, 0};
    } else {
        if(Rank[a] > Rank[b]) swap(a, b);

        Rank[b] += (Rank[a] == Rank[b]);
        Ops[timer] = {a, Parent[a]};
        Parent[a] = b;
    }
}

void Undo() {
    Parent[Ops[timer].first] = Ops[timer].second;
    timer -= 1;
}

int main() {
    int n, m, a, b, t;
    cin >> n >> m;

    while(m --) {
        cin >> t;
        if(t == 1) {
            cin >> a >> b;
            Union(a, b);
        }
        if(t == 2) {
            cin >> a;
            for(int i = 1; i <= a; i += 1)
                Undo();
        }
        if(t == 3) {
            cin >> a >> b;
            cout << (Find(a) == Find(b)) << '\n';
        }
    }
    return 0;
}