#include<bits/stdc++.h>
using namespace std;
int f[100005][25],fst[100005],k,dp[200005],n,m,s,u,v,sg[300005],sh[300005];
char c[300005],c1;
struct node{
int v,nxt;
}e[500005];
void add(int u,int v){
e[++k].v=v;
e[k].nxt=fst[u];
fst[u]=k;
}
void acl(int u,int fa,int d){
dp[u]=d;f[u][0]=fa;
sg[u]=sg[fa]+(c[u]=='G');
sh[u]=sh[fa]+(c[u]=='H');
for(int i=1;i<=20;i++){
f[u][i]=f[f[u][i-1]][i-1];
}
for(int i=fst[u];i;i=e[i].nxt){
int vi=e[i].v;
if(vi!=fa){
acl(vi,u,d+1);
}
}
}
int tj(int u,int v){
if(dp[u]<dp[v]){
swap(u,v);
}
for(int i=20;i>=0;i--){
if(dp[u]-(1<<i)>=dp[v]){
u=f[u][i];
}
}
if(u==v){
return u;
}
for(int i=20;i>=0;i--){
if(f[u][i]!=f[v][i]){
u=f[u][i];
v=f[v][i];
}
}
return f[u][0];
}
int read(){
char c;
int x=0;
c=getchar();
while(!isdigit(c)){
c=getchar();
}
while(isdigit(c)){
x=x*10+c-'0';
c=getchar();
}
return x;
}
int main(){
n=read();m=read();
for(int i=1;i<=n;i++){
c[i]=getchar();
}
for(int i=1;i<=n-1;i++){
u=read();v=read();
add(u,v);
add(v,u);
}
acl(1,0,1);
for(int i=1;i<=m;i++){
int x,y;
x=read();y=read();
c1=getchar();
int p=f[tj(x,y)][0];
if(c1=='G'){
cout<<(sg[x]-sg[p]>0 || sg[y]-sg[p]>0);
}else{
cout<<(sh[x]-sh[p]>0 || sh[y]-sh[p]>0);
}
}
return 0;
}