#include <bits/stdc++.h>
using namespace std;
int n, q;
struct Union_Find {
vector<int> par;
vector<int> rank;
void init( int n ) {
par.resize( n );
rank.resize( n );
for ( int i = 0; i < n; ++i ) {
par[ i ] = i;
rank[ i ] = 0;
}
}
int find( int s ) {
if ( par[ s ] == s ) {
return s;
}
return par[ s ] = find( par[ s ] );
}
void unite( int x, int y ) {
int a = find( x ), b = find( y );
if ( a == b ) {
return;
}
if ( rank[ a ] < rank[ b ] ) {
par[ a ] = b;
}
else {
par[ a ] = b;
if ( rank[ a ] == rank[ b ] ) {
++rank[ b ];
}
}
}
bool same( int x, int y ) {
return find( x ) == find( y );
}
unsigned int size() {
return par.size();
}
};
int main()
{
scanf("%d %d", &n, &q);
Union_Find uf;
uf.init(n);
while(q--){
int p, a, b;
scanf("%d %d %d", &p, &a, &b);
if(p){
printf("%s\n", uf.same(a, b) ? "Yes" : "No");
}
else{
uf.unite(a, b);
}
}
return 0;
}