#include <bits/stdc++.h>

using namespace std;

#define MAXN 200050
#define MAXLOGN 20

int N, M, a, b, t;
string L;
int f[MAXN][26];
vector<int> A[MAXN];
int T[MAXN];
int lvl[MAXN];
int Q[MAXN][2];
int qs;
int temp[26];
int dp[MAXLOGN][MAXN];
int maxk;

void dfs(int node, int prv) {
	T[node] = prv;
	lvl[node] = prv == -1 ? 0 : lvl[prv] + 1;
	for (int i = 0; i < 26; i++) {
		f[node][i] = prv == -1 ? 0 : f[prv][i];
	}
	f[node][ L[node] - 'a' ]++;
	for (int x : A[node]) {
		if (x != prv) {
			dfs(x, node);
		}
	}
}

int goKth(int x, int k) {
	for (int i = maxk; i >= 0; i--) {
		if (k & (1 << i)) {
			x = dp[i][x];
		}
	}
	return x;
}

int lca(int x, int y) {
	if (lvl[x] < lvl[y]) {
		swap(x, y);
	}
	x = goKth(x, lvl[x] - lvl[y]);
	if (x == y) {
		return x;
	}
	for (int i = maxk; i >= 0; i--) {
		if (dp[i][x] != -1 && dp[i][y] != -1 && dp[i][x] != dp[i][y]) {
			x = dp[i][x];
			y = dp[i][y];
		}
	}
	return dp[0][x];
}

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);
	cin.sync_with_stdio(false);
	
	cin >> N >> M;
	cin >> L;
	for (int i = 0; i < N - 1; i++) {
		cin >> a >> b;
		a--; b--;
		A[a].push_back(b);
		A[b].push_back(a);
	}
	int x = -1;
	char c = -1;
	qs = 0;
	for (int i = 0; i < M; i++) {
		cin >> t;
		if (t == 1) {
			cin >> Q[qs][0] >> Q[qs][1];
			Q[qs][0]--; Q[qs][1]--;
			qs++;
		}
		else {
			cin >> x >> c;
			x--;
			A[x].push_back(N);
			A[N].push_back(x);
			L += c;
			N++;
		}
	}
	
	dfs(0, -1);
	for (int i = 0; i < N; i++) {
		dp[0][i] = T[i];
	}
	for (int j = 1; (1 << j) <= N; j++) {
		maxk = j;
		for (int i = 0; i < N; i++) {
			if (dp[j - 1][i] == -1) {
				dp[j][i] = -1;
			}
			else {
				dp[j][i] = dp[j - 1][ dp[j - 1][i] ];
			}
		}
	}
	
	for (int i = 0; i < qs; i++) {
		a = Q[i][0];
		b = Q[i][1];
		int z = lca(a, b);
		for (int j = 0; j < 26; j++) {
			temp[j] = f[a][j] + f[b][j] - f[z][j];
		}
		if (T[z] != -1) {
			z = T[z];
			for (int j = 0; j < 26; j++) {
				temp[j] -= f[z][j];
			}
		}
		int ans = 0;
		for (int j = 0; j < 26; j++) {
			if (temp[j] & 1) {
				ans++;
			}
		}
		cout << ans << '\n';
	}
	
	return 0;
}