#include <iostream>
#include <bits/stdc++.h>
#define p pair<int,int>
#define f first
#define s second
typedef long long ll;
using namespace std;
ll M = 1e9 + 7;
class DSU{
public:
vector<ll>sz;
vector<int>par;
vector<int>blk;
DSU(int n){
sz.resize(n+1,1ll);
par.resize(n+1);
blk.resize(n+1,0);
for(int i = 0;i<=n;i++) par[i] = i;
}
int findPar(int u){
if(par[u] == u) return u;
return par[u] = findPar(par[u]);
}
void join(int u, int v){
u = findPar(u); v = findPar(v);
if(u == v) return;
if(sz[u] > sz[v]) swap(u,v);
sz[v] += sz[u];
blk[v] += blk[u];
par[u] = v;
return;
}
void update(int u, bool t){
u = findPar(u);
if(t) blk[u]++;
else blk[u]--;
}
bool query(int u){
u = findPar(u);
return (blk[u] > 0);
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n,q; cin>>n>>q;
DSU dsu(n);
vector<bool> state(n+1,1);
while(q--){
int t; cin>>t;
if(t==1) {
int u,v;cin>>u>>v;
dsu.join(u,v);
}
else if(t == 2){
int v; cin>>v;
dsu.update(v,state[v]);
state[v] = !state[v];
}
else{
int v; cin>>v;
if(dsu.query(v)) cout<<"Yes\n";
else cout<<"No\n";
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBwIHBhaXI8aW50LGludD4KI2RlZmluZSBmIGZpcnN0CiNkZWZpbmUgcyBzZWNvbmQKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbCBNID0gMWU5ICsgNzsKCmNsYXNzIERTVXsKCXB1YmxpYzoKCXZlY3RvcjxsbD5zejsKCXZlY3RvcjxpbnQ+cGFyOwogICB2ZWN0b3I8aW50PmJsazsgCglEU1UoaW50IG4pewoJCXN6LnJlc2l6ZShuKzEsMWxsKTsKCQlwYXIucmVzaXplKG4rMSk7CiAgICAgICAgYmxrLnJlc2l6ZShuKzEsMCk7CgkJZm9yKGludCBpID0gMDtpPD1uO2krKykgcGFyW2ldID0gaTsKCX0KCWludCBmaW5kUGFyKGludCB1KXsKCQlpZihwYXJbdV0gPT0gdSkgcmV0dXJuIHU7CgkJcmV0dXJuIHBhclt1XSA9IGZpbmRQYXIocGFyW3VdKTsKCX0KCQoJdm9pZCBqb2luKGludCB1LCBpbnQgdil7CgkJdSA9IGZpbmRQYXIodSk7IHYgPSBmaW5kUGFyKHYpOwoJCWlmKHUgPT0gdikgcmV0dXJuOwoJCWlmKHN6W3VdID4gc3pbdl0pIHN3YXAodSx2KTsKCQlzelt2XSArPSBzelt1XTsKICAgICAgICBibGtbdl0gKz0gYmxrW3VdOyAKCQlwYXJbdV0gPSB2OwoJCXJldHVybjsKCX0KCXZvaWQgdXBkYXRlKGludCB1LCBib29sIHQpewogICAgICAgIHUgPSBmaW5kUGFyKHUpOyAKICAgICAgICBpZih0KSBibGtbdV0rKzsKICAgICAgICBlbHNlIGJsa1t1XS0tOyAKICAgfSAKICAgYm9vbCBxdWVyeShpbnQgdSl7CiAgICAgICAgdSA9IGZpbmRQYXIodSk7IAogICAgICAgIHJldHVybiAoYmxrW3VdID4gMCk7IAogICB9Cn07CmludCBtYWluKCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKCQoJaW50IG4scTsgY2luPj5uPj5xOwoJRFNVIGRzdShuKTsgCiAgICB2ZWN0b3I8Ym9vbD4gc3RhdGUobisxLDEpOyAKCXdoaWxlKHEtLSl7CiAgICAgICBpbnQgdDsgY2luPj50OyAKICAgICAgICBpZih0PT0xKSB7CgkgICAgCWludCB1LHY7Y2luPj51Pj52OwoJICAgICAJZHN1LmpvaW4odSx2KTsKICAgICAgICB9IAogICAgICAgZWxzZSBpZih0ID09IDIpewogICAgICAgICAgICAgICBpbnQgdjsgY2luPj52OyAKICAgICAgICAgICAgICAgZHN1LnVwZGF0ZSh2LHN0YXRlW3ZdKTsgCiAgICAgICAgICAgICAgIHN0YXRlW3ZdID0gIXN0YXRlW3ZdOyAKICAgICAgICB9IAogICAgICAgIGVsc2V7CiAgICAgICAgICAgICBpbnQgdjsgY2luPj52OyAKICAgICAgICAgICAgIGlmKGRzdS5xdWVyeSh2KSkgY291dDw8Illlc1xuIjsgCiAgICAgICAgICAgICBlbHNlIGNvdXQ8PCJOb1xuIjsgCiAgICAgICAgfQogICAgICAgCgl9CgkKCQp9