#include <bits/stdc++.h>
using namespace std;
char var[100005];
vector<int> a[100005];
int n, m, dfn[100005], st[18][100005], d = 1, b[2][100005];
void dfs(int fa, int ch, int hnum, int gnum) {
b[0][ch] = hnum, b[1][ch] = gnum;
if (var[ch - 1] == 'H')
b[0][ch]++;
else
b[1][ch]++;
st[0][d] = fa;
dfn[ch] = d++;
for (int i = 0; i < a[ch].size(); i++)
if (a[ch][i] != fa)
dfs(ch, a[ch][i], b[0][ch], b[1][ch]);
}
inline void build() {
int len = log2(n);
for (int i = 1; i <= len; i++)
for (int j = 1; j <= n - (1 << i) + 1; j++)
if (dfn[st[i - 1][j]] < dfn[st[i - 1][j + (1 << i - 1)]])
st[i][j] = st[i - 1][j];
else
st[i][j] = st[i - 1][j + (1 << i - 1)];
}
inline int query(int u, int v) {
if (u == v)
return u;
u = dfn[u], v = dfn[v];
if (u > v)
swap(u, v);
int len = log2(v - u++);
if (dfn[st[len][u]] < dfn[st[len][v - (1 << len) + 1]])
return dfn[st[len][u]];
return dfn[st[len][v - (1 << len) + 1]];
}
inline bool myfind(int u, int v, int lca, char like) {
int fa = st[0][dfn[lca]];
if (like == 'H' && (b[0][u] - b[0][fa] || b[0][v] - b[0][fa]))
return true;
if (like == 'G' && (b[1][u] - b[1][fa] || b[1][v] - b[1][fa]))
return true;
return false;
}
int main() {
int u, v, lca;
char like;
scanf("%d%d%s", &n, &m, &var);
for (int i = 1; i < n; i++) {
scanf("%d%d", &u, &v);
a[u].push_back(v);
a[v].push_back(u);
}
dfs(0, 1, 0, 0);
build();
for (int i = 1; i <= m; i++) {
scanf("%d%d %c", &u, &v, &like);
lca = query(u, v);
if (myfind(u, v, lca, like))
putchar('1');
else
putchar('0');
}
return 0;
}