class node(object):
    def __init__(self, l, betu):
        self.route = l
        self.edges = []
        self.letters = []
        for i in range(26):
            self.letters.append(False)
        self.letter = betu
        self.letters[self.letter] = True

    def add(self, x):
        self.edges.append(x)

def Check(l):
    for element in l:
        print element.route
        print element.letters

def update(l1, l2):
    for i in range(len(l1)):
        if (l1[i] and not l2[i]) or (not l1[i] and l2[i]):
            l2[i] = True
        else:
            l2[i] = False

def dfs(x, l):
    for i in range(len(l[x].edges)):
        if len(l[l[x].edges[i]].route) == 0 and l[x].edges[i] != 0:
            l[l[x].edges[i]].route.extend(l[x].route)
            l[l[x].edges[i]].route.append(x)
            update(l[x].letters, l[l[x].edges[i]].letters)
            dfs(l[x].edges[i], l)

def count(l):
    x = 0
    for element in l:
        if element:
            x+=1
    return x

def lca(x, y):
    if len(x.route)>len(y.route):
        x, y = y, x

    for i in range(len(x.route)):
        if x.route[i] != y.route[i]:
            return x.route[i-1]
        if i == len(x.route)-1 and x.route[i] == y.route[i]:
            return x.route[i]
    return 0

if __name__ == '__main__':
    lista = []
    sol = []
    ch = raw_input().split(' ')
    n, m = int(ch[0]), int(ch[1])
    letters = raw_input()
    for i in range(len(letters)):
        a = ord(letters[i]) - ord('a')
        lista.append(node([], a))

    for i in range(n-1):
        ch = raw_input().split(' ')
        x, y = int(ch[0]), int(ch[1])
        lista[x-1].add(y-1)
        lista[y-1].add(x-1)

    dfs(0, lista)
        
    for i in range(m):
        ch = raw_input().split(' ')
        a, b, c1 = int(ch[0]), int(ch[1]), ch[2]       
        if a == 2:
            c = ord(c1) - ord('a')
            new = node([], c)
            new.route.extend(lista[b-1].route)
            new.route.append(b-1)
            update(lista[b-1].letters, new.letters)
            lista.append(new)
        else:
            c = int(c1)
            l = lista[b-1].letters[:]
            update(lista[c-1].letters, l)
            a1 = lca(lista[b-1], lista[c-1])
            a = lista[a1]
            if l[a.letter]:
                l[a.letter] = False
            else:
                l[a.letter] = True
            sol.append(count(l))

    for element in sol:
        print element