#include <bits/stdc++.h>
#define SZ(X) ((int)(X).size())
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define RI(X) scanf("%d", &(X))
#define DRI(X) int (X); scanf("%d", &X)
#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)
#define RS(X) scanf("%s", (X))
#define PB push_back
using namespace std;
const int SIZE = 2e3+10;
int a[SIZE],BIT[SIZE][SIZE];
vector<int>fac[SIZE];
void ins(int bit[],int x,int v){
for(;x<SIZE;x+=x&-x)bit[x]+=v;
}
int qq(int bit[],int x){
int res=0;
for(;x;x-=x&-x)res+=bit[x];
return res;
}
int main(){
REPP(i,1,SIZE){
for(int j=i;j<SIZE;j+=i)fac[j].PB(i);
}
DRII(N,Q);
REP(i,N){
RI(a[i]);
}
REPP(i,1,N+1){
REP(j,SZ(fac[i]))ins(BIT[fac[i][j]],i/fac[i][j],a[i]);
}
while(Q--){
char s[12];
RS(s);
if(s[0]==\'J\'){
if(N<=3)printf("%d\\n",a[0]);
else if(N==4)printf("%d\\n",max(a[0],a[0]+a[2]));
else if(N==6)printf("%d\\n",max(a[0],max(a[0]+a[3],a[0]+a[2]+a[4])));
else{
int an=0;
REP(i,SZ(fac[N])-1){
an=max(an,qq(BIT[fac[N][i]],N/fac[N][i]-1));
}
printf("%d\\n",an+a[0]);
}
}
else if(s[0]==\'R\'){
RI(N);
}
else{
DRII(x,v);
x--;
if(x){
int dif=v-a[x];
REP(j,SZ(fac[x]))ins(BIT[fac[x][j]],x/fac[x][j],dif);
}
a[x]=v;
}
}
return 0;
}