#include<cstdio>
#include<algorithm>
#include<set>
#include<bitset>
#define N 10000007
#define int long long
#define ct Chtholly_tree
#define Chtholly set<ct>::iterator
using namespace std;
bitset<N>isp;
int n,m;
void csh(){
isp.set();
isp[1]=0;
for(int i=2;i<=10000000;i++){
if(!isp[i])continue;
for(int j=2*i;j<=10000000;j+=i)isp[j]=0;
}
}
struct Chtholly_tree{
int l,r;
mutable int val;
ct(int a=0,int b=0,int c=0){l=a,r=b,val=c;}
bool operator<(const ct &c)const{return l<c.l;}
};
set<ct>st;
Chtholly split(int p){
Chtholly it=st.lower_bound(ct(p,0,0));
if(it!=st.end()&&it->l==p)return it;
it--;ct tmp=*it;st.erase(it);
st.insert(ct(tmp.l,p-1,tmp.val));
return st.insert(ct(p,tmp.r,tmp.val)).first;
}
void assign(int l,int r,int v){
Chtholly right=split(r+1),left=split(l);
st.erase(left,right);
st.insert(ct(l,r,v));
}
void change(int x,int v){
Chtholly r=split(x+1),l=split(x);
l->val+=v;
}
int query(int l,int r){
int res=0;
Chtholly right=split(r+1),left=split(l);
for(;left!=right;left++){
if(isp[left->val])res+=(left->r-left->l+1);
}
return res;
}
signed main(){
csh();
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++){
int a;
scanf("%lld",&a);
st.insert(ct(i,i,a));
}
while(m--){
char s[12];
int l,r,v;
scanf("%s%lld%lld",s,&l,&r);
if(s[0]=='A'){
change(r,l);
}else if(s[0]=='R'){
scanf("%lld",&v);
assign(r,v,l);
}else printf("%lld\n",query(l,r));
}
return 0;
}