#include<bits/stdc++.h>
using namespace std;
int arr[500010]={0};
int con[500010]={0};
int fi(int x)
{
    if(arr[x]==x)
    {
        return x;
    }
    else {
        return arr[x]=fi(arr[x]);//查找,压缩路径
    }
    
}
void hb(int x,int y)
{
    int a=fi(x);
    int b=fi(y);
    if(a!=b) 
    {
        con[arr[b]]+=con[arr[a]]; //将前一根节点数所含数目加到下一根节点
        arr[a]=arr[b];
    }
}   
int main()
{
    int n,q;
    scanf("%d",&n);
    scanf("%d",&q);
    for(int i=1;i<=n;i++)
    {
        arr[i]=i;
        con[i]=1;
    }
    for(int i=0;i<q;i++)
    {
        int zl;
        scanf("%d",&zl);
        int a,b;
        if(zl==1)
        {
            scanf("%d",&a);
            scanf("%d",&b);
            hb(a,b);
        }
        else if(zl==2)
        {
            scanf("%d",&a);
            scanf("%d",&b);
            if(fi(a)==fi(b))
            {
                printf("YES\n");
            }
            else 
            {
                printf("NO\n");
            }
        }
        else if(zl==3)
        {
            scanf("%d",&a);
            printf("%d\n",con[fi(a)]);
        }
    }
    return 0;
}