#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5+1000;
ll n, m;
vector<ll> G[N];
char c[N];
ll dep[N], fa[N][25], numH[N], numG[N];
void dfs(ll u, ll f, ll d) {
dep[u] = d;
fa[u][0] = f;
numH[u] = numH[f] + (c[u] == 'H');
numG[u] = numG[f] + (c[u] == 'G');
for (ll i = 1; i <= 22; i++) {
fa[u][i] = fa[fa[u][i - 1]][i - 1];
}
for (auto y : G[u]) {
if (y != f) dfs(y, u, d + 1);
}
return;
}
ll lca(ll x, ll y) {
if (dep[x] < dep[y]) swap(x, y);
for (ll i = 22; i >= 0; i--) {
if (dep[x] - (1 << i) >= dep[y]) x = fa[x][i];
}
if (x == y) return x;
for (ll i = 22; i >= 0; i--) {
if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
}
return fa[x][0];
}
int main() {
cin >> n >> m;
for (ll i = 1; i <= n; i++) {
cin >> c[i];
}
for (ll i = 1; i < n; i++) {
ll x, y;
cin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
dfs(1, 0, 1);
for (ll i = 1; i <= m; i++) {
ll a, b;
char ch;
cin >> a >> b >> ch;
ll p = fa[lca(a, b)][0];
if (ch == 'H') cout << ((numH[a] - numH[p]) > 0) || ((numH[b] - numH[p]) > 0);
else cout << ((numG[a] - numG[p]) > 0) || ((numG[b] - numG[p]) > 0);
}
return 0;
}