#include <bits/stdc++.h>
using namespace std;
int n, q;
const int N = 1e5 + 5;
int parent[N];
void make_set(){
// Đặt nút "cha" của mỗi tập hợp là chính nó
for (int i = 1; i <= n; i++) parent[i] = i;
}
int find(int x){
// Ta sử dụng kĩ thuật nén đường đi để tối ưu
if (parent[x] == x) return x;
int p = find(parent[x]);
parent[x] = p;
return p;
}
void set_union(int a, int b){
// Đặt nút "cha" của b là a
a = find(a); b = find(b);
if (a != b){
parent[b] = a;
}
}
void input(){
cin >> n >> q;
make_set();
for (int i = 1; i <= q; i++){
int t, u, v;
cin >> t >> u >> v;
if (t == 1){
// Nối 2 đỉnh u, v
set_union(u, v);
}
else{
// Kiểm tra xem 2 đỉnh u, v có được kết nối hay không?
if (find(u) == find(v)) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
}
int main(){
input();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbiwgcTsKY29uc3QgaW50IE4gPSAxZTUgKyA1OwppbnQgcGFyZW50W05dOwoKdm9pZCBtYWtlX3NldCgpewogICAgICAvLyDEkOG6t3QgbsO6dCAiY2hhIiBj4bunYSBt4buXaSB04bqtcCBo4bujcCBsw6AgY2jDrW5oIG7DswogICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHBhcmVudFtpXSA9IGk7Cn0KCmludCBmaW5kKGludCB4KXsKICAgICAgLy8gVGEgc+G7rSBk4bulbmcga8SpIHRodeG6rXQgbsOpbiDEkcaw4budbmcgxJFpIMSR4buDIHThu5FpIMawdQogICAgICBpZiAocGFyZW50W3hdID09IHgpIHJldHVybiB4OwogICAgICBpbnQgcCA9IGZpbmQocGFyZW50W3hdKTsKICAgICAgcGFyZW50W3hdID0gcDsKICAgICAgcmV0dXJuIHA7Cn0KCnZvaWQgc2V0X3VuaW9uKGludCBhLCBpbnQgYil7CiAgICAgIC8vIMSQ4bq3dCBuw7p0ICJjaGEiIGPhu6dhIGIgbMOgIGEKICAgICAgYSA9IGZpbmQoYSk7IGIgPSBmaW5kKGIpOwogICAgICBpZiAoYSAhPSBiKXsKICAgICAgICAgICAgcGFyZW50W2JdID0gYTsKICAgICAgfQp9Cgp2b2lkIGlucHV0KCl7CiAgICAgIGNpbiA+PiBuID4+IHE7CiAgICAgIG1ha2Vfc2V0KCk7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHE7IGkrKyl7CiAgICAgICAgICAgIGludCB0LCB1LCB2OwogICAgICAgICAgICBjaW4gPj4gdCA+PiB1ID4+IHY7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodCA9PSAxKXsKICAgICAgICAgICAgICAgICAgLy8gTuG7kWkgMiDEkeG7iW5oIHUsIHYKICAgICAgICAgICAgICAgICAgc2V0X3VuaW9uKHUsIHYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgeGVtIDIgxJHhu4luaCB1LCB2IGPDsyDEkcaw4bujYyBr4bq/dCBu4buRaSBoYXkga2jDtG5nPwogICAgICAgICAgICAgICAgICBpZiAoZmluZCh1KSA9PSBmaW5kKHYpKSBjb3V0IDw8ICJZRVMiIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgIGVsc2UgY291dCA8PCAiTk8iIDw8IGVuZGw7CiAgICAgICAgICAgIH0KICAgICAgfQp9CgppbnQgbWFpbigpewogICAgICBpbnB1dCgpOwoKICAgICAgcmV0dXJuIDA7Cn0=