#include<bits/stdc++.h>
#define int1 long long
#define N 200000
#define M 1000000
#define inf 1145141919
using namespace std;
int1 n,q,qq,cc,k,i,j,c[M + 5],a[N + 5],b[N + 5],id[N + 5],p[N + 5],l,r,s,sqn,l1,r1,now;
char ch;
struct owo{
int1 l,r,id,ans,pre;
} m[N + 5];
bool cmp(owo x,owo y){
if(b[x.l] != b[y.l]){
return x.l < y.l;
}
if(b[x.l] & 1){
return x.r < y.r;
}
return x.r > y.r;
}
int1 read(){
int1 x = 0,f = 1;
char ch = getchar();
while(!isdigit(ch)){
if(ch == '-'){
f = -1;
}
ch = getchar();
}
while(isdigit(ch)){
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
void u_print(int1 x){
if(x > 9){
u_print(x / 10);
}
putchar(x % 10 ^ 48);
return ;
}
void print(int1 x){
if(x < 0){
putchar('-');
x = -x;
}
u_print(x);
return ;
}
void ps(int1 x){
print(x);
putchar(' ');
return ;
}
void pe(int1 x){
print(x);
putchar('\n');
return ;
}
void f(int1 i,int1 l,int1 r,int1 id,int1 ans,int1 pre){
m[i].l = l,m[i].r = r,m[i].id = id,m[i].ans = ans,m[i].pre = pre;
return ;
}
int main(){
n = read(),q = read();
for(i = 1; i <= n; i++){
a[i] = read();
}
for(i = 1; i <= q; i++){
ch = getchar();
while(ch < 'A' || ch > 'Z'){
ch = getchar();
}
l1 = read(),r1 = read();
if(ch == 'Q'){
++qq;
f(qq,l1,r1,qq,0,cc);
}else{
id[++cc] = l1,p[cc] = r1;
}
}
sqn = n / (int1)(sqrt(qq));
for(i = 1; i <= n; i++){
b[i] = (i - 1) / sqn + 1;
}
sort(m + 1,m + qq + 1,cmp);
s = r = 0,l = 1,now = 0;
for(i = 1; i <= qq; i++){
while(l < m[i].l){
if(c[a[l]] == 1){
s--;
}
c[a[l]]--,l++;
}
while(l > m[i].l){
l--,c[a[l]]++;
if(c[a[l]] == 1){
s++;
}
}
while(r < m[i].r){
r++,c[a[r]]++;
if(c[a[r]] == 1){
s++;
}
}
while(r > m[i].r){
if(c[a[r]] == 1){
s--;
}
c[a[r]]--,r--;
}
while(now > m[i].pre){
if(id[now] <= m[i].r && id[now] >= m[i].l){
if(c[a[id[now]]] == 1){
s--;
}
c[a[id[now]]]--,c[p[now]]++;
if(c[p[now]] == 1){
s++;
}
}
swap(a[id[now]],p[now]);
now--;
}
while(now < m[i].pre){
now++;
if(id[now] <= m[i].r && id[now] >= m[i].l){
if(c[a[id[now]]] == 1){
s--;
}
c[a[id[now]]]--,c[p[now]]++;
if(c[p[now]] == 1){
s++;
}
}
swap(a[id[now]],p[now]);
}
m[m[i].id].ans += s;
}
for(i = 1; i <= qq; i++){
pe(m[i].ans);
}
return 0;
}
记录