/*
* Author: Geeza
*/
#include <bits/stdc++.h>
#define ld long double
#define ll long long
#define pb push_back
#define fin(a, n) for(int i = a; i < n; i++)
#define fjn(a, n) for(int j = a; j < n; j++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
const double PI = acos(-1);
const int N = 1e5+20;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1000000007, inf = 1e6;
string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
char dc[] = {'D', 'L', 'R', 'U'};
struct DSU {
vector<ll> parent, size, black;
map<ll, int> color;
DSU(ll n) : parent(n + 1), size(n + 1, 1), black(n+1, 0) {
iota(parent.begin(), parent.end(), 0);
for (ll x = 1; x <= n+1; x++)
color[x] = 0;
}
ll find(ll x) {
if (x == parent[x]) return x;
return parent[x] = find(parent[x]);
}
bool unite(ll x, ll y) {
x = find(x);
y = find(y);
if (x == y) return false;
if (size[x] < size[y]) swap(x, y);
black[x] += black[y];
parent[y] = x;
size[x] += size[y];
return true;
}
};
void solve() {
ll n, q; cin >> n >> q;
DSU dsu(n);
fin(0, q) {
int t; cin >> t;
if (t == 1) {
ll u, v; cin >> u >> v;
dsu.unite(u, v);
}
else {
ll u; cin >> u;
ll leader = dsu.find(u);
if (t == 2) {
if (dsu.color[u] == 0) {
if (leader != u) dsu.black[leader]++;
dsu.black[u]++;
}
else {
if (leader != u) dsu.black[leader]--;
dsu.black[u]--;
}
dsu.color[u] ^= 1;
}
else {
if (dsu.black[leader] > 0 || dsu.black[u] > 0) cout << "Yes\n";
else cout << "No\n";
}
}
}
}
int main() {
FAST;
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int tt = 1; //cin >> tt;
while(tt--){
solve();
}
return 0;
}
LyoKKiBBdXRob3I6IEdlZXphCiovCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaW4oYSwgbikgZm9yKGludCBpID0gYTsgaSA8IG47IGkrKykKI2RlZmluZSBmam4oYSwgbikgZm9yKGludCBqID0gYTsgaiA8IG47IGorKykKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLGEuZW5kKCkKI2RlZmluZSBhbGxyKGEpIGEucmJlZ2luKCksYS5yZW5kKCkKI2RlZmluZSBGQVNUIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGRvdWJsZSBQSSA9IGFjb3MoLTEpOwpjb25zdCBpbnQgTiA9IDFlNSsyMDsKY29uc3QgbGwgb28gPSAweDNmM2YzZjNmM2YzZjNmM2Y7CmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3LCBpbmYgPSAxZTY7CgpzdHJpbmcgZGlbXSA9IHsiRCIsIkwiLCAiVSIsICJSIiwgIlVMIiwgIlVSIiwgIkRMIiwgIkRSIn07CmludCBkeFtdID0geysxLCArMCwgKzAsIC0xLCAtMSwgLTEsICsxLCArMX07CmludCBkeVtdID0geyswLCAtMSwgKzEsICswLCAtMSwgKzEsIC0xLCArMX07CmNoYXIgZGNbXSA9IHsnRCcsICdMJywgJ1InLCAnVSd9OwoKc3RydWN0IERTVSB7CiAgICB2ZWN0b3I8bGw+IHBhcmVudCwgc2l6ZSwgYmxhY2s7CiAgICBtYXA8bGwsIGludD4gY29sb3I7CiAgICBEU1UobGwgbikgOiBwYXJlbnQobiArIDEpLCBzaXplKG4gKyAxLCAxKSwgYmxhY2sobisxLCAwKSB7CiAgICAgICAgaW90YShwYXJlbnQuYmVnaW4oKSwgcGFyZW50LmVuZCgpLCAwKTsKICAgICAgICBmb3IgKGxsIHggPSAxOyB4IDw9IG4rMTsgeCsrKQogICAgICAgICAgICBjb2xvclt4XSA9IDA7CiAgICB9CgogICAgbGwgZmluZChsbCB4KSB7CiAgICAgICAgaWYgKHggPT0gcGFyZW50W3hdKSByZXR1cm4geDsKICAgICAgICByZXR1cm4gcGFyZW50W3hdID0gZmluZChwYXJlbnRbeF0pOwogICAgfQoKICAgIGJvb2wgdW5pdGUobGwgeCwgbGwgeSkgewogICAgICAgIHggPSBmaW5kKHgpOwogICAgICAgIHkgPSBmaW5kKHkpOwogICAgICAgIGlmICh4ID09IHkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoc2l6ZVt4XSA8IHNpemVbeV0pIHN3YXAoeCwgeSk7CiAgICAgICAgYmxhY2tbeF0gKz0gYmxhY2tbeV07CiAgICAgICAgcGFyZW50W3ldID0geDsKICAgICAgICBzaXplW3hdICs9IHNpemVbeV07CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn07Cgp2b2lkIHNvbHZlKCkgewogICAgbGwgbiwgcTsgY2luID4+IG4gPj4gcTsKICAgIERTVSBkc3Uobik7CgogICAgZmluKDAsIHEpIHsKICAgICAgICBpbnQgdDsgY2luID4+IHQ7CiAgICAgICAgaWYgKHQgPT0gMSkgewogICAgICAgICAgICBsbCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgICAgICBkc3UudW5pdGUodSwgdik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsbCB1OyBjaW4gPj4gdTsKICAgICAgICAgICAgbGwgbGVhZGVyID0gZHN1LmZpbmQodSk7CiAgICAgICAgICAgIGlmICh0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChkc3UuY29sb3JbdV0gPT0gMCkgewogICAgICAgICAgICAgICAgICAgIGlmIChsZWFkZXIgIT0gdSkgZHN1LmJsYWNrW2xlYWRlcl0rKzsKICAgICAgICAgICAgICAgICAgICBkc3UuYmxhY2tbdV0rKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChsZWFkZXIgIT0gdSkgZHN1LmJsYWNrW2xlYWRlcl0tLTsKICAgICAgICAgICAgICAgICAgICBkc3UuYmxhY2tbdV0tLTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRzdS5jb2xvclt1XSBePSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGRzdS5ibGFja1tsZWFkZXJdID4gMCB8fCBkc3UuYmxhY2tbdV0gPiAwKSBjb3V0IDw8ICJZZXNcbiI7CiAgICAgICAgICAgICAgICBlbHNlIGNvdXQgPDwgIk5vXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIEZBU1Q7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwidyIsc3Rkb3V0KTsKI2VuZGlmCiAgICBpbnQgdHQgPSAxOyAvL2NpbiA+PiB0dDsKICAgIHdoaWxlKHR0LS0pewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==