#include<bits/stdc++.h>
#define int long long
#define endl '\n'
typedef long long ll;
using namespace std;
const int N = 1e6 + 5;
int n,q,a[N],t[N << 4],len,x,v,l,r;
bool prime[N << 4];
char opt;
void init(){
memset(prime,true,sizeof(prime));
prime[0] = prime[1] = false;
for(int i = 2;i <= 10000000;i++){
if(prime[i])t[++len] = i;
for(int j = 1;j <= len && t[j] * i <= 10000000;j++){
prime[i * t[j]] = false;
if(i % t[j] == 0)break;
}
}
}
struct node{int l,r,cnt,change;}tree[N << 2];
void pushup(int p){tree[p].cnt = tree[p * 2].cnt + tree[p * 2 + 1].cnt;}
void pushdown(int p){
if(!tree[p].change)return;
tree[p * 2].change = tree[p].change;
tree[p * 2 + 1].change = tree[p].change;
tree[p * 2].cnt = (tree[p * 2].r - tree[p * 2].l + 1) * (tree[p].change <= 10000000 && prime[tree[p].change]);
tree[p * 2 + 1].cnt = (tree[p * 2 + 1].r - tree[p * 2 + 1].l + 1) * (tree[p].change <= 10000000 && prime[tree[p].change]);
tree[p].change = 0;
}
void build(int p,int l,int r){
tree[p].l = l,tree[p].r = r;
if(l == r){
tree[p].cnt = (a[l] <= 10000000 && prime[a[l]]);
tree[p].change = 0;
return;
}
int mid = (l + r) / 2;
build(p * 2,l,mid);
build(p * 2 + 1,mid + 1,r);
pushup(p);
}
void add(int p,int x,int v){
if(x < tree[p].l || tree[p].r < x)return;
if(tree[p].l == tree[p].r)return a[l] += x,tree[p].cnt = (a[l] <= 10000000 && prime[a[l]]),void();
pushdown(p);
add(p * 2,x,v),add(p * 2 + 1,x,v);
pushup(p);
}
void change(int p,int l,int r,int x){
if(r < tree[p].l || tree[p].r < l)return;
if(l <= tree[p].l && tree[p].r <= r){
tree[p].cnt = (x <= 10000000 && prime[x]) * (tree[p].r - tree[p].l + 1);
tree[p].change = x;
return;
}
pushdown(p);
change(p * 2,l,r,x);
change(p * 2 + 1,l,r,x);
pushup(p);
}
int query(int p,int l,int r){
if(r < tree[p].l || tree[p].r < l)return 0;
if(l <= tree[p].l && tree[p].r <= r)return tree[p].cnt;
pushdown(p);
return query(p * 2,l,r) + query(p * 2 + 1,l,r);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> q;
for(int i = 1;i <= n;i++)cin >> a[i];
init();
build(1,1,n);
while(q--){
cin >> opt;
if(opt == 'A')cin >> v >> x,add(1,x,v);
else if(opt == 'R')cin >> x >> l >> r,change(1,l,r,x);
else if(opt == 'Q')cin >> l >> r,cout << query(1,l,r) << endl;
}
}