/* Acwing 836 并查集*/
#include <iostream>
using namespace std;
const int N = 100010;
int p[N];
// 查找根节点
int find(int x)
{
// 只有根节点满足p[x] == x,递归查到根
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
int main()
{
// 1. 输入n, m
int n, m;
scanf("%d%d", &n, &m);
// 2.初始化数据 当前位置的值等于索引
for (int i = 1; i <= n; i ++) p[i] = i;
// 3. m次查询
while (m--)
{
// 4. 输入字符和整数
char op[2];
int a,b;
scanf("%s%d%d", op, &a, &b);
// 5. 合并操作,让a根节点的值等于b的根节点
if (op[0] == 'M') p[find(a)] = find(b);
// 6. 查询操作
else if (find(a) == find(b)) printf("Yes\n");
else printf("No\n");
}
return 0;
}