#include <bits/stdc++.h>
using namespace std;
struct block {
int first, last;
bool inc = true, dec = true;
block(int x = 0) : first(x), last(x) {}
friend block operator+ (const block& A, const block& B) {
block res;
res.first = A.first;
res.last = B.last;
res.inc = A.inc && A.last < B.first && B.inc;
res.dec = A.dec && A.last > B.first && B.dec;
return res;
}
};
const int N = 120'001, K = 17;
vector<pair<int,int>> adj[N];
int dep[N], par[K][N];
block info[K][N];
void dfs(int u, int p = -1) {
for (auto [v, w] : adj[u]) {
if (v == p) continue;
par[0][v] = u;
info[0][v] = w;
for (int i = 0; i < K-1; i++) {
par[i+1][v] = par[i][par[i][v]];
info[i+1][v] = info[i][v] + info[i][par[i][v]];
}
dep[v] = dep[u] + 1;
dfs(v, u);
}
}
block flip(block B) {
swap(B.first, B.last);
swap(B.inc, B.dec);
return B;
}
block query(int u, int v) {
// cout<<u<<' '<<v<<'\n';
block resu = -1, resv = -1;
if (dep[u] > dep[v]) {
int d = dep[u] - dep[v];
for (int k = K-1; k >= 0; k--) {
if ((d >> k) & 1) {
resu = resu.first == -1 ? info[k][u] : resu + info[k][u];
u = par[k][u];
}
}
}
assert(dep[u] == dep[v]);
if (u == v) return resu;
if (dep[u] < dep[v]) {
int d = dep[v] - dep[u];
for (int k = K-1; k >= 0; k--) {
if ((d >> k) & 1) {
// cout<<v<<' '<<par[k][v]<<' '<<info[k][v].first<<' '<<info[k][v].last<<"\n";
resv = resv.first == -1 ? info[k][v] : resv + info[k][v];
v = par[k][v];
}
}
}
assert(dep[u] == dep[v]);
if (u == v) return flip(resv);
for (int k = 17; k >= 0; k--) {
if (par[k][u] != par[k][v]) {
resu = resu.first == -1 ? info[k][u] : resu + info[k][u];
resv = resv.first == -1 ? info[k][v] : info[k][v] + resv;
u = par[k][u];
v = par[k][v];
}
}
resu = resu + info[0][u];
resv = resv + info[0][v];
return resu + flip(resv);
}
int main() {
int n,k; cin >> n >> k;
vector<tuple<int,int,int>> qu;
for (int i = 1, u, v; i <= n+k-1; i++) {
char t; cin >> t >> u >> v;
if (t == 'S') {
adj[u].emplace_back(v, i);
adj[v].emplace_back(u, i);
} else {
qu.emplace_back(u, v, i);
}
}
dfs(1);
for (auto [u, v, t] : qu) {
auto b = query(v, u);
cout << (b.inc && b.last < t ? "yes" : "no") << "\n";
}
}