#include <iostream>
#include <fstream>
using namespace std;

//ifstream f("wow.in");

#include <vector>
#define LE 200666
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define f cin

int rmq[20][LE];
int lev[LE],ch[LE][30];
bool viz[LE];
pair<int,int> Qs[LE];
vector<int> H[LE];
int C[LE],lmax;

void dfs(int nod)
{
    int N=H[nod].size(),i;
    viz[nod]=true;
    ++ch[nod][C[nod]];

    for(i=0; i<N; ++i)
    {
        int D=H[nod][i];

        if (viz[D]==false)
        {
            rmq[0][D]=nod;
            lev[D]=lev[nod]+1;
            for(int j=0; j<26; ++j) ch[D][j]=ch[nod][j];
            dfs(D);
        }
    }
}

int lca(int nod1,int nod2)
{
    if (lev[nod1]>lev[nod2]) swap(nod1,nod2);
    int D=lev[nod2]-lev[nod1],i;

    for(i=lmax; i>=0; --i)
        if (D&(1<<i))
            nod2=rmq[i][nod2];


    if (nod1==nod2) return nod1;

    for(i=lmax; i>=0; --i)
        if (rmq[i][nod1]!=rmq[i][nod2])
            nod1=rmq[i][nod1],nod2=rmq[i][nod2];

    return rmq[0][nod1];
}

string str;
int R[666];

int main()
{
    int n,m,i,k=0,l=0;

    f>>n>>m;
    f.get();
    f>>str;
    for(i=0; i<n; ++i) C[i+1]=str[i]-'a';

    for(i=1; i<n; ++i)
    {
        int xx,yy;;
        f>>xx>>yy;
        H[xx].pb(yy);
        H[yy].pb(xx);
    }

    for(i=1; i<=m; ++i)
    {
        int xx,yy,typ;
        char cc;

        f>>typ;

        if (typ==1)
        {
            f>>xx>>yy;
            Qs[++k]=mp(xx,yy);
        }

        if (typ==2)
        {
            f>>xx>>cc;
            ++n;
            cc-='a';
            C[n]=cc;
            H[xx].pb(n);
            H[n].pb(xx);
        }
    }

    dfs(1);

    for(l=1; (1<<l)<=n; ++l)
        for(i=1; i<=n; ++i)
            rmq[l][i]=rmq[l-1][rmq[l-1][i]];

    lmax=l-1;

    for(i=1; i<=k; ++i)
    {
        int j;

        for(j=0; j<26; ++j) R[j]=ch[Qs[i].x][j]+ch[Qs[i].y][j];
        int L=lca(Qs[i].x,Qs[i].y);
        for(j=0; j<26; ++j) R[j]-=2*ch[L][j];
        ++R[C[L]];

        int result=0;

        for(j=0; j<26; ++j)
            result+=R[j]%2;

        cout<<result<<'\n';
    }

    return 0;
}