#include<bits/stdc++.h>
# define ll long long
#define lson(x) x<<1
#define rson(x) x<<1|1
using namespace std;
const ll maxn=5e5+9;
ll n,m;
ll a[maxn];
struct node{
ll gcd,sum;
}tree[4*maxn];
inline void biuld(ll rt,ll l,ll r){
if(l==r){
return tree[rt].sum=tree[rt].gcd=a[l]-a[l-1],void();
return;
}
ll mid=l+r>>1;
biuld(lson(rt),l,mid);
biuld(rson(rt),mid+1,r);
tree[rt].sum=tree[lson(rt)].sum+tree[rson(rt)].sum;
tree[rt].gcd=__gcd(tree[lson(rt)].gcd,tree[rson(rt)].gcd);
}
inline void ch(ll rt,ll l,ll r,ll x,ll z){
if(x==r&&l==x){
tree[rt].gcd=tree[rt].sum=tree[rt].sum+z;
return ;
}
ll mid=l+r>>1;
if(x<=mid){
ch(lson(rt),l,mid,x,z);
}else{
ch(rson(rt),mid+1,r,x,z);
}
tree[rt].sum=tree[lson(rt)].sum+tree[rson(rt)].sum;
tree[rt].gcd=__gcd(tree[lson(rt)].gcd,tree[rson(rt)].gcd);
}
inline node qq(ll rt,ll l,ll r,ll x,ll y){
if(l>r){
return {0};
}
if(l>=x&&y>=r){
return tree[rt];
}
ll mid=l+r>>1;
if(y<=mid){
return qq(lson(rt),l,mid,x,y);
}else if(x>mid){
return qq(rson(rt),mid+1,r,x,y);
}else{
node tmp,left=qq(lson(rt),l,mid,x,y),right=qq(rson(rt),mid+1,r,x,y);
tmp.sum=left.sum+right.sum;
tmp.gcd=__gcd(left.gcd,right.gcd);
return tmp;
}
}
int main(){
cin>>n>>m;
for(ll i=1;i<=n;i++){
cin>>a[i];
}
biuld(1ll,1ll,n);
char op;
ll x,y,z;
while(m--){
cin>>op;
if(op=='C'){
scanf("%lld%lld%lld",&x,&y,&z);
ch(1,1,n,x,z);
if(y<n){
ch(1,1,n,y+1,-z);
}
}else{
scanf("%lld%lld",&x,&y);
cout<<abs(__gcd(qq(1,1,n,1,x).sum,qq(1,1,n,x+1,y).gcd))<<endl;
}
}
return 0;
}