#include<iostream>
#include<cmath>
using namespace std;
#define mx 10010
int n,m,head[mx],cnt=0;
int anc[mx][20],g[mx][20],dis[mx];
char c;
struct E{
int nxt,to;
}e[mx*2];
void add(int a,int b){
e[++cnt].to=b;
e[cnt].nxt=head[a];
head[a]=cnt;
}
void init(){
for(int i=1;i<=n;i++){
for(int j=1;j<=20;j++){
anc[i][j]=anc[anc[i][j-1]][j-1];
g[i][j]=g[anc[i][j-1]][j-1]+g[i][j-1]+dis[i];
}
}
}
void dfs(int u,int f){
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(v==f)continue;
dfs(v,u);
anc[v][0]=u;
g[v][0]=dis[u];
}
}
int step,sum;
void sol(int beg,int end){
step=sum=0;
sum+=dis[beg];
for(int i=19;i;i--){
if(end<anc[beg][i]){
step+=pow(2,i);
sum+=g[beg][i];
beg=anc[beg][i];
}
}
step++;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>c;
if(c=='G')dis[i]=1;
else dis[i]=-1;
}
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
dfs(1,0);
init();
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y>>c;
if(x==y){
cout<<((dis[x]==1&&c=='G')||(dis[x]==-1&&c=='H'))?1:0;
continue;
}
sol(y,x);
if(c=='G'&&step==abs(sum)&&sum>0)cout<<1;
else if(c=='H'&&step==abs(sum)&&sum<0)cout<<1;
else if(sum!=step)cout<<1;
else cout<<0;
}
return 0;
}