/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone{
Scanner sc
= new Scanner
(System.
in); sc.nextInt();
sc.nextLine();
int q = sc.nextInt();
int[][] queries = new int[q][3];
for (int i = 0; i < q; i++) {
queries[i][0] = sc.nextInt();
queries[i][1] = sc.nextInt();
queries[i][2] = sc.nextInt();
}
System.
out.
println(findDistinctCharacters
(data, queries
)); }
private static List
<Integer
> findDistinctCharacters
(String data,
int[][] queries
) { List<Integer> ans = new ArrayList<>();
HashMap
<Character, TreeSet
<Integer
>> map
= new HashMap
<>(); for (int i = 0; i < 26; i++) {
map.put(((char) ('a' + i)), new TreeSet<>());
}
for (int i = 0; i < data.length(); i++) {
map.get(data.charAt(i)).add(i);
}
StringBuilder s = new StringBuilder(data);
for (int[] query : queries) {
if (query[0] == 1) {
char rep = (char) ('a' + query[2] - 1);
char toReplace = s.charAt(query[1] - 1);
map.get(toReplace).remove(query[1] - 1);
map.get(rep).add(query[1] - 1);
s.setCharAt(query[1] - 1, rep);
} else if (query[0] == 2) {
int left = query[1] - 1;
int right = query[2] - 1;
int distinct = 0;
for (int i = 0; i < 26; i++) {
if (!map.get((char) ('a' + i)).isEmpty()) {
Integer val
= map.
get((char) ('a' + i
)).
floor(right
); if (val != null && val >= left
) {
distinct++;
}
}
}
ans.add(distinct);
}
}
return ans;
}
}