#include <stdio.h>
#include <stdlib.h>

#define INF 10100

int *p;
int *rank;

void unite(int, int);
void makeSet(int);
void link(int, int);
int findSet(int);
int Same(int, int);

int main(){
    int n,q;
    int com, x, y;
    int *ans;
    int i;

    scanf("%d %d", &n, &q);

    // create S
    p = (int *)malloc(n*sizeof(int));
    rank = (int *)malloc(n*sizeof(int));

    // create array answer
    ans = (int *)malloc(q*sizeof(int));
    for(i=0;i<q;i++){
        ans[i] = INF;
    }

    // make Set
    for(i=0;i<n;i++){
        makeSet(i);
    }

    for(i=0;i<q;i++){
        scanf("%d %d %d", &com, &x, &y);
        if(com == 0){
            unite(x, y);
        }
        else if(com == 1){
            ans[i] = Same(x, y);
        }
    }

    // output
    for(i=0;i<q;i++){
        if(ans[i]!=INF) printf("%d\n", ans[i]);
    }

    return 0;
}

void makeSet(int x){
    p[x] = x;
    rank[x]=0;
}

void unite(int x, int y){
    link(findSet(x),findSet(y));
}

void link(int x, int y){
    if(rank[x] > rank[y]) p[y] = x;
    else{
        p[x]=y;
        if(rank[x]==rank[y]) rank[y]=rank[x];
    }
}

int findSet(int x){
    if(x!=p[x]) p[x]=findSet(p[x]);
    return p[x];
}

int Same(int x, int y){
    if(findSet(x)==findSet(y)) return 1;
    else return 0;
}
