#include <bits/stdc++.h>
using namespace std;
#define N 300010
int n,m;
int s[N],l[N];
stack < pair<int,int> > t;
int find(int x) {return x == s[x] ? x : s[x] = find(s[x]);}
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++) s[i] = i,l[i] = 1;
while(m--){
int opt,x,y;
cin >> opt;
if(opt == 1){
cin >> x >> y;
int dx = find(x),dy = find(y);
if(l[dx] > l[dy]) swap(dx,dy);
s[dx] = dy;
t.push({dx,dy});
l[dy] = max(l[dy],l[dx]+1);
}else if(opt == 2){
if(!t.empty()){
auto [dx,dy] = t.top();
t.pop();
s[dx] = dx;
s[dy] = dy;
}
}else{
cin >> x >> y;
cout << (find(x) == find(y) ? "Yes\n" : "No\n");
}
}
return 0;
}