#include<bits/stdc++.h>
using namespace std;
struct farm{
vector<int> son;
char milk;
int kuai;
};
farm a[100010];
int n,m,path_a,path_b;
void dfs(int now,int hao){
if(a[now].kuai) return ;
for(int i=0;i<a[now].son.size();i++){
if(a[a[now].son[i]].milk==a[now].milk){
a[a[now].son[i]].kuai=hao;
dfs(a[now].son[i],hao);
}
else{
a[a[now].son[i]].kuai=hao+1;
dfs(a[now].son[i],hao+1);
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i].milk;
for(int i=1;i<n;i++){
cin>>path_a>>path_b;
a[path_a].son.push_back(path_b);
a[path_b].son.push_back(path_a);
}
dfs(1,1);
int f,t;
char l;
vector<bool>ans;
for(int i=1;i<=m;i++){
cin>>f>>t>>l;
if(a[f].milk==l||a[t].milk==l&&a[f].kuai!=a[t].kuai)
ans.push_back(1);
else ans.push_back(0);
}
for(int i=0;i<ans.size();i++)
cout<<ans[i];
}