#include<cstdlib>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;

const int buffer=1<<13;
char buff[buffer]; 
int cnt=0;

//getInt() reads and returns one integer at a time
int getInt() {
    int number = 0;
    while(buff[cnt] < '0' || '9' < buff[cnt])
        if(++cnt >= buffer) fread(buff, buffer, 1, stdin), cnt = 0;

    while('0' <= buff[cnt] && buff[cnt] <= '9') {
        number = number * 10 + buff[cnt] - '0';
        if(++cnt >= buffer) fread(buff, buffer, 1, stdin), cnt = 0;
    }

    return number;
}

const int MAX_N = 100005;
int stX[MAX_N],stY[MAX_N],stRadX[MAX_N],stRadY[MAX_N],k;
int tata[MAX_N],rang[MAX_N];
int oper,x,y,radX,radY;
int i,n,m,pasi;

inline int radacina(int x){
       int aux,nod=x;
       while(x!=tata[x]) x=tata[x];
       while(nod!=x){ aux=tata[nod]; tata[nod]=x; nod=aux; } 
       return x;
}

inline void uneste(int x, int y){
       if(rang[x]<rang[y]) tata[x]=y;
       else tata[y]=x;
       if(rang[x]==rang[y]) ++rang[x];
}

int main(){
    n=getInt(); 
    m=getInt();
    
    for(i=1;i<=n;i++){
                      tata[i]=i;
                      rang[i]=0;
                     }
    
    for(;m>0;--m){
                  oper=getInt();
                  if(oper==1){
                              x=getInt();
                              y=getInt();
                              
                              radX=radacina(x);
                              radY=radacina(y);
                              
                              ++k;
                              stX[k]=x;
                              stRadX[k]=radX;
                              stY[k]=y;
                              stRadY[k]=radY;
                              
                              uneste(radX,radY);
                             }
                  else if(oper==2){
                                   pasi=getInt();
                                   for(i=k;i>k-pasi;--i)
                                      {
                                       tata[stX[i]]=stRadX[i];
                                       tata[stY[i]]=stRadY[i];
                                      }
                                   k-=pasi;
                                  }
                  else if(oper==3){
                                   x=getInt();
                                   y=getInt();
                                   if(radacina(x)==radacina(y)) printf("1\n");
                                   else printf("0\n");
                                  }
                 }
    
    return 0;
}