#include <bits/stdc++.h>
#define ll long long
#define ft first
#define sc second
#define el '\n'
#define boost ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define file(name) freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout)
#define pb push_back
#define all(x) (x).begin(),(x).end()
using namespace std;
const ll N = 2e5;
ll n, m, parent[N + 1], sz[N + 1];
ll parent_go[N + 1], sz_go[N + 1];
void read() {
cin >> n >> m;
}
void make_set() {
for(ll i = 1; i <= n; i ++) {
parent[i] = i;
sz[i] = 1;
parent_go[i] = i;
sz_go[i] = 1;
}
}
ll find_set(ll k) {
if(k == parent[k]) return k;
return parent[k] = find_set(parent[k]);
}
void union_set(ll u, ll v) {
ll x = find_set(u);
ll y = find_set(v);
if(x != y) {
if(sz[x] < sz[y]) swap(x, y);
parent[y] = x;
sz[x] += sz[y];
}
}
ll find_go(ll k) {
if(k == parent_go[k]) return k;
return parent_go[k] = find_go(parent_go[k]);
}
void union_go(ll u, ll v) {
ll x = find_go(u);
ll y = find_go(v);
parent_go[x] = y;
}
void solve() {
make_set();
for(ll i = 1; i <= m; i ++) {
ll x, l, r; cin >> x >> l >> r;
if(x == 1) {
union_set(l, r);
} else if(x == 2) {
ll k = find_set(l);
while(1) {
l = find_go(l + 1);
if(l > r) break;
ll t = find_set(l);
if(t != k) {
union_set(t, k);
}
union_go(l, l + 1);
}
} else {
ll x = find_set(l);
ll y = find_set(r);
if(x != y) cout << "NO" << el;
else cout << "YES" << el;
}
}
}
void write() {
}
int main() {
boost;
//file();
read();
solve();
write();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBlbCAnXG4nCiNkZWZpbmUgYm9vc3QgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApCiNkZWZpbmUgZmlsZShuYW1lKSBmcmVvcGVuKG5hbWUiLmlucCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbCh4KSAoeCkuYmVnaW4oKSwoeCkuZW5kKCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbGwgTiA9IDJlNTsKbGwgbiwgbSwgcGFyZW50W04gKyAxXSwgc3pbTiArIDFdOwpsbCBwYXJlbnRfZ29bTiArIDFdLCBzel9nb1tOICsgMV07Cgp2b2lkIHJlYWQoKSB7CiAgICBjaW4gPj4gbiA+PiBtOwp9Cgp2b2lkIG1ha2Vfc2V0KCkgewogICAgZm9yKGxsIGkgPSAxOyBpIDw9IG47IGkgKyspIHsKICAgICAgICBwYXJlbnRbaV0gPSBpOwogICAgICAgIHN6W2ldID0gMTsKICAgICAgICBwYXJlbnRfZ29baV0gPSBpOwogICAgICAgIHN6X2dvW2ldID0gMTsKICAgIH0KfQoKbGwgZmluZF9zZXQobGwgaykgewogICAgaWYoayA9PSBwYXJlbnRba10pIHJldHVybiBrOwogICAgcmV0dXJuIHBhcmVudFtrXSA9IGZpbmRfc2V0KHBhcmVudFtrXSk7Cn0KCnZvaWQgdW5pb25fc2V0KGxsIHUsIGxsIHYpIHsKICAgIGxsIHggPSBmaW5kX3NldCh1KTsKICAgIGxsIHkgPSBmaW5kX3NldCh2KTsKCiAgICBpZih4ICE9IHkpIHsKICAgICAgICBpZihzelt4XSA8IHN6W3ldKSBzd2FwKHgsIHkpOwoKICAgICAgICBwYXJlbnRbeV0gPSB4OwogICAgICAgIHN6W3hdICs9IHN6W3ldOwogICAgfQp9CgpsbCBmaW5kX2dvKGxsIGspIHsKICAgIGlmKGsgPT0gcGFyZW50X2dvW2tdKSByZXR1cm4gazsKICAgIHJldHVybiBwYXJlbnRfZ29ba10gPSBmaW5kX2dvKHBhcmVudF9nb1trXSk7Cn0KCnZvaWQgdW5pb25fZ28obGwgdSwgbGwgdikgewogICAgbGwgeCA9IGZpbmRfZ28odSk7CiAgICBsbCB5ID0gZmluZF9nbyh2KTsKICAgIAogICAgcGFyZW50X2dvW3hdID0geTsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIG1ha2Vfc2V0KCk7CgogICAgZm9yKGxsIGkgPSAxOyBpIDw9IG07IGkgKyspIHsKICAgICAgICBsbCB4LCBsLCByOyBjaW4gPj4geCA+PiBsID4+IHI7CiAgICAgICAgaWYoeCA9PSAxKSB7CiAgICAgICAgICAgIHVuaW9uX3NldChsLCByKTsKICAgICAgICB9IGVsc2UgaWYoeCA9PSAyKSB7CiAgICAgICAgICAgIGxsIGsgPSBmaW5kX3NldChsKTsKICAgICAgICAgICAgd2hpbGUoMSkgewogICAgICAgICAgICAgICAgbCA9IGZpbmRfZ28obCArIDEpOwogICAgICAgICAgICAgICAgaWYobCA+IHIpIGJyZWFrOwogICAgICAgICAgICAgICAgbGwgdCA9IGZpbmRfc2V0KGwpOwogICAgICAgICAgICAgICAgaWYodCAhPSBrKSB7CiAgICAgICAgICAgICAgICAgICAgdW5pb25fc2V0KHQsIGspOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5pb25fZ28obCwgbCArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGwgeCA9IGZpbmRfc2V0KGwpOwogICAgICAgICAgICBsbCB5ID0gZmluZF9zZXQocik7CgogICAgICAgICAgICBpZih4ICE9IHkpIGNvdXQgPDwgIk5PIiA8PCBlbDsKICAgICAgICAgICAgZWxzZSBjb3V0IDw8ICJZRVMiIDw8IGVsOwogICAgICAgIH0KICAgIH0KfQp2b2lkIHdyaXRlKCkgewoKfQppbnQgbWFpbigpIHsKICAgIGJvb3N0OwogICAgLy9maWxlKCk7CiAgICByZWFkKCk7CiAgICBzb2x2ZSgpOwogICAgd3JpdGUoKTsKICAgIHJldHVybiAwOwp9