#include<iostream>
#include<vector>
using namespace std;
//ifstream cin("tree.in");
//ofstream cout("tree.out");
int t[300000],l[300000],parc[300000];
char c[300000];
vector <int> a[300000];
char s;
int n,m,y,x;
void parcu(int x,int v){
parc[x]=1;
l[x]=v;
for(int i=0;i<a[x].size();i++)
if(parc[a[x][i]]!=1){
        t[a[x][i]]=x;
        parcu(a[x][i],v+1);
}
}
int main(){
cin>>n>>m;

for(int i=1;i<=n;i++)cin>>c[i];
for(int i=1;i<n;i++)cin>>x>>y,a[x].push_back(y),a[y].push_back(x);
parcu(1,0);
for(int i=1;i<=m;i++){
    cin>>x;
    if(x==1){

        cin>>x>>y;

        int li[40]={0};
        while(x!=y){
           if(l[x]>l[y]) {
            li[c[x]-'a']++;//cout<<"x-"<<x<<endl;
            x=t[x];

           }else{
            li[c[y]-'a']++;
           // cout<<"y-"<<y<<endl;
            y=t[y];
           }
        }
        //cout<<"x-"<<x<<endl;
        li[c[x]-'a']++;
        int ans=0;
        for(int i=0;i<=30;i++){//<<li[i]<<" ";
            if(li[i]%2==1)ans++;}//cout<<endl;
        cout<<ans<<"\n";
    }else{

       cin>>t[++n];cin>>c[n];
       //cout<<c[n]<<endl;
       l[n]=l[t[n]]+1;
    }
}
}