#include <bits/stdc++.h>
using namespace std;

vector<int> father(500001,0);
vector<int> si(500001,1);
void init(){
    for(int i=0;i<father.size();i++){
        father[i]=i;
    }
}

int find(int u){
    return u==father[u]? u : father[u]=find(father[u]);
}

bool isSame(int u,int v){
    return find(u)==find(v);
}

void join(int u,int v){ 
    int rootu=find(u);
    int rootv=find(v);
    if(rootu==rootv) return;
    else if(si[rootu]>si[rootv]){
        father[rootv]=rootu;
        si[rootu]+=si[rootv];
        return;
    }
    else{
        father[rootu]=rootv;
        si[rootv]+=si[rootu];
        return;
    }
}

int size(int u){
    int x = find(u);
    return si[x];
}

int main() {
    init();
    int n,q;
    cin>>n>>q;
    for(int m=0;m<q;m++){
        int op,i,j;
        cin>>op;
        switch(op){
            case 1:
                cin>>i>>j;
                join(i,j);
                break;
            case 2:
                cin>>i>>j;
                if(isSame(i, j)) cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
                break;
            case 3:
                cin>>i;
                int x = size(i);
                cout<<x<<endl;
        }
    }
    return 0;
}