#include<bits/stdc++.h>
#define Lim 10000000
#define MAX 100010
#define lld long long
using namespace std;
bool prime[10000001];
void sieve()
{
for(int i=2;i*i<=10000000;i++)
{
if(prime[i]==0)
{
for(int j=i*i;j<=10000000;j+=i)
prime[j]=1;
}
}
prime[1] = 1;
prime[0] = 1;
}
bool check(lld n)
{
if(n>10000000)
return false;
if(prime[n]==1)
return false;
else
return true;
}
lld tree[4*MAX+1];
lld lazy[4*MAX+1];
lld a[MAX+1];
void init(int i,int start,int end)
{
if(start==end)
{
tree[i] = check(a[start]);
lazy[i]=-1;
return;
}
int mid = (start+end)/2;
init(2*i,start,mid);
init(2*i+1,mid+1,end);
tree[i] = tree[2*i] + tree[2*i+1];
lazy[i]=-1;
}
void refresh(int i,int start,int end)
{
if(lazy[i]!=-1)
{
tree[i] = check(lazy[i]) * (end-start+1);
if(end>start)
{
lazy[2*i] = lazy[i];
lazy[2*i+1] = lazy[i];
}
else
{
a[start] = lazy[i];
}
lazy[i]=-1;
}
}
lld query(int i,int start,int end,int qs,int qe)
{
refresh(i,start,end);
if(qs>end||qe<start)
return 0;
if(qs<=start&&qe>=end)
return tree[i];
int mid = (start+end)/2;
return query(2*i,start,mid,qs,qe)+query(2*i+1,mid+1,end,qs,qe);
}
void replace(int i,int start,int end,int qs,int qe,lld value)
{
refresh(i,start,end);
if(qs>end||qe<start)
return;
if(qs<=start&&qe>=end)
{
lazy[i] = value;
refresh(i,start,end);
return;
}
int mid = (start+end)/2;
replace(2*i,start,mid,qs,qe,value);
replace(2*i+1,mid+1,end,qs,qe,value);
tree[i] = tree[2*i]+tree[2*i+1];
}
void ADD(int i,int start,int end,int qs,int qe,lld value)
{
refresh(i,start,end);
if(qs>end||qe<start)
return;
if(start==end)
{
a[start]+=value;
tree[i] = check(a[start]);
return;
}
int mid = (start+end)/2;
ADD(2*i,start,mid,qs,qe,value);
ADD(2*i+1,mid+1,end,qs,qe,value);
tree[i] = tree[2*i] + tree[2*i+1];
}
int swap(int &a,int &b)
{
a = a+b;
b = a-b;
a = a-b;
}
int main()
{
sieve();
int n,q,start,end;
lld value;
char type;
scanf("%d",&n);
scanf("%d",&q);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
init(1,0,n-1);
while(q--)
{
cin>>type;
if(type=='Q')
{
scanf("%d%d",&start,&end);
if(start>end)
swap(start,end);
printf("%lld\n",query(1,0,n-1,start-1,end-1));
}
else if(type=='A')
{
scanf("%lld%d",&value,&start);
end = start;
ADD(1,0,n-1,start-1,end-1,value);
}
else
{
scanf("%lld%d%d",&value,&start,&end);
if(start>end)
swap(start,end);
replace(1,0,n-1,start-1,end-1,value);
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgTGltIDEwMDAwMDAwCiNkZWZpbmUgTUFYIDEwMDAxMAojZGVmaW5lIGxsZCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKYm9vbCBwcmltZVsxMDAwMDAwMV07CnZvaWQgc2lldmUoKQp7CiAgICBmb3IoaW50IGk9MjtpKmk8PTEwMDAwMDAwO2krKykKICAgIHsKICAgICAgICBpZihwcmltZVtpXT09MCkKICAgICAgICB7CiAgICAgICAgZm9yKGludCBqPWkqaTtqPD0xMDAwMDAwMDtqKz1pKQogICAgICAgIHByaW1lW2pdPTE7CiAgICAgICAgfQogICAgfQogICAgcHJpbWVbMV0gPSAxOwogICAgcHJpbWVbMF0gPSAxOwp9CmJvb2wgY2hlY2sobGxkIG4pCnsKICAgIGlmKG4+MTAwMDAwMDApCiAgICByZXR1cm4gZmFsc2U7CgogICAgaWYocHJpbWVbbl09PTEpCiAgICByZXR1cm4gZmFsc2U7CgogICAgZWxzZQogICAgcmV0dXJuIHRydWU7Cgp9CgpsbGQgdHJlZVs0Kk1BWCsxXTsKbGxkIGxhenlbNCpNQVgrMV07CmxsZCBhW01BWCsxXTsKCnZvaWQgaW5pdChpbnQgaSxpbnQgc3RhcnQsaW50IGVuZCkKewogICAgaWYoc3RhcnQ9PWVuZCkKICAgIHsKICAgICAgICB0cmVlW2ldID0gY2hlY2soYVtzdGFydF0pOwogICAgICAgIGxhenlbaV09LTE7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZCA9IChzdGFydCtlbmQpLzI7CiAgICBpbml0KDIqaSxzdGFydCxtaWQpOwogICAgaW5pdCgyKmkrMSxtaWQrMSxlbmQpOwogICAgdHJlZVtpXSA9IHRyZWVbMippXSArIHRyZWVbMippKzFdOwoKICAgIGxhenlbaV09LTE7Cn0Kdm9pZCByZWZyZXNoKGludCBpLGludCBzdGFydCxpbnQgZW5kKQp7CiAgICBpZihsYXp5W2ldIT0tMSkKICAgIHsKICAgICAgICB0cmVlW2ldID0gY2hlY2sobGF6eVtpXSkgKiAoZW5kLXN0YXJ0KzEpOwogICAgICAgIGlmKGVuZD5zdGFydCkKICAgICAgICB7CiAgICAgICAgICAgIGxhenlbMippXSA9IGxhenlbaV07CiAgICAgICAgICAgIGxhenlbMippKzFdID0gbGF6eVtpXTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgYVtzdGFydF0gPSBsYXp5W2ldOwogICAgICAgIH0KICAgICAgICBsYXp5W2ldPS0xOwogICAgfQp9CmxsZCBxdWVyeShpbnQgaSxpbnQgc3RhcnQsaW50IGVuZCxpbnQgcXMsaW50IHFlKQp7CiAgICByZWZyZXNoKGksc3RhcnQsZW5kKTsKCiAgICBpZihxcz5lbmR8fHFlPHN0YXJ0KQogICAgcmV0dXJuIDA7CgogICAgaWYocXM8PXN0YXJ0JiZxZT49ZW5kKQogICAgcmV0dXJuIHRyZWVbaV07CgogICAgaW50IG1pZCA9IChzdGFydCtlbmQpLzI7CgogICAgcmV0dXJuIHF1ZXJ5KDIqaSxzdGFydCxtaWQscXMscWUpK3F1ZXJ5KDIqaSsxLG1pZCsxLGVuZCxxcyxxZSk7Cn0KCnZvaWQgcmVwbGFjZShpbnQgaSxpbnQgc3RhcnQsaW50IGVuZCxpbnQgcXMsaW50IHFlLGxsZCB2YWx1ZSkKewogICAgcmVmcmVzaChpLHN0YXJ0LGVuZCk7CgogICAgaWYocXM+ZW5kfHxxZTxzdGFydCkKICAgIHJldHVybjsKCiAgICBpZihxczw9c3RhcnQmJnFlPj1lbmQpCiAgICB7CiAgICAgICAgbGF6eVtpXSA9IHZhbHVlOwogICAgICAgIHJlZnJlc2goaSxzdGFydCxlbmQpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbWlkID0gKHN0YXJ0K2VuZCkvMjsKICAgIHJlcGxhY2UoMippLHN0YXJ0LG1pZCxxcyxxZSx2YWx1ZSk7CiAgICByZXBsYWNlKDIqaSsxLG1pZCsxLGVuZCxxcyxxZSx2YWx1ZSk7CiAgICB0cmVlW2ldID0gdHJlZVsyKmldK3RyZWVbMippKzFdOwp9Cgp2b2lkIEFERChpbnQgaSxpbnQgc3RhcnQsaW50IGVuZCxpbnQgcXMsaW50IHFlLGxsZCB2YWx1ZSkKewogICByZWZyZXNoKGksc3RhcnQsZW5kKTsKCiAgIGlmKHFzPmVuZHx8cWU8c3RhcnQpCiAgIHJldHVybjsKCiAgIGlmKHN0YXJ0PT1lbmQpCiAgIHsKICAgICAgIGFbc3RhcnRdKz12YWx1ZTsKICAgICAgIAogICAgICAgdHJlZVtpXSA9IGNoZWNrKGFbc3RhcnRdKTsKICAgICAgIHJldHVybjsKICAgfQoKICAgaW50IG1pZCA9IChzdGFydCtlbmQpLzI7CgogICBBREQoMippLHN0YXJ0LG1pZCxxcyxxZSx2YWx1ZSk7CiAgIEFERCgyKmkrMSxtaWQrMSxlbmQscXMscWUsdmFsdWUpOwoKICAgdHJlZVtpXSA9IHRyZWVbMippXSArIHRyZWVbMippKzFdOwp9CmludCBzd2FwKGludCAmYSxpbnQgJmIpCnsKICAgIGEgPSBhK2I7CiAgICBiID0gYS1iOwogICAgYSA9IGEtYjsKfQppbnQgbWFpbigpCnsKICAgIHNpZXZlKCk7CgogICAgaW50IG4scSxzdGFydCxlbmQ7CiAgICBsbGQgdmFsdWU7CiAgICBjaGFyIHR5cGU7CiAgICBzY2FuZigiJWQiLCZuKTsKICAgIHNjYW5mKCIlZCIsJnEpOwoKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICBzY2FuZigiJWxsZCIsJmFbaV0pOwoKICAgIGluaXQoMSwwLG4tMSk7CgogICAgd2hpbGUocS0tKQogICAgewogICAgICAgIGNpbj4+dHlwZTsKCiAgICAgICAgaWYodHlwZT09J1EnKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAgc2NhbmYoIiVkJWQiLCZzdGFydCwmZW5kKTsKICAgICAgICAgICAgICAgaWYoc3RhcnQ+ZW5kKQogICAgICAgICAgICAgICBzd2FwKHN0YXJ0LGVuZCk7CiAgICAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIixxdWVyeSgxLDAsbi0xLHN0YXJ0LTEsZW5kLTEpKTsKICAgICAgICAgICB9CgogICAgICAgIGVsc2UgaWYodHlwZT09J0EnKQogICAgICAgIHsKICAgICAgICAgICAgc2NhbmYoIiVsbGQlZCIsJnZhbHVlLCZzdGFydCk7CiAgICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgICAgICBBREQoMSwwLG4tMSxzdGFydC0xLGVuZC0xLHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgc2NhbmYoIiVsbGQlZCVkIiwmdmFsdWUsJnN0YXJ0LCZlbmQpOwogICAgICAgICAgICBpZihzdGFydD5lbmQpCiAgICAgICAgICAgIHN3YXAoc3RhcnQsZW5kKTsKICAgICAgICAgICAgcmVwbGFjZSgxLDAsbi0xLHN0YXJ0LTEsZW5kLTEsdmFsdWUpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQoK