#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;
}