#include<bits/stdc++.h>
using namespace std;
#define int long long
struct stu{
int x,y,w,ww;
}t[4000010];
int n,q,a[8000010],b[8000010],mp[8000010],la[8000010],d,e,kw,xx,yy;
char c;
bool check(int l1,int r1,int l2,int r2){
return !(l2>r1||r2<l1);
}
bool chk(int l1,int r1,int l2,int r2){
return l1<=l2&&r1>=r2;
}
void dfs(int l,int r,int h){
if(l>r)return ;
t[h].x=l,t[h].y=r;
if(l==r){
t[h].w=abs(b[l]);
t[h].ww=b[l];
mp[l]=h;
return ;
}
dfs(l,(l+r)/2,h*2);
dfs((l+r)/2+1,r,h*2+1);
t[h].w=__gcd(abs(t[h*2].w),abs(t[h*2+1].w));
t[h].ww=t[h*2].ww+t[h*2+1].ww;
}
void ch2(int h,int x,int y){
if(!check(x,y,t[h].x,t[h].y))return ;
if(t[h].x==t[h].y&&check(x,y,t[h].x,t[h].y)){
t[h].w+=kw;
t[h].ww=t[h].w;
return ;
}
ch2(h*2,x,y);
ch2(h*2+1,x,y);
t[h].w=__gcd(abs(t[h*2].w),abs(t[h*2+1].w));
t[h].ww=t[h*2].ww+t[h*2+1].ww;
}
int ch(int h,int x,int y){
if(!check(x,y,t[h].x,t[h].y))return 0;
if(chk(x,y,t[h].x,t[h].y)){
return abs(t[h].w);
}
int ans=0;
ans=__gcd(abs(ans),abs(ch(h*2,x,y)));
ans=__gcd(abs(ans),abs(ch(h*2+1,x,y)));
return ans;
}
int ch3(int h,int x,int y){
if(!check(x,y,t[h].x,t[h].y))return 0;
if(check(x,y,t[h].x,t[h].y)){
return t[h].ww;
}
int ans=0;
ans+=ch3(h*2,x,y);
ans+=ch3(h*2+1,x,y);
return ans;
}
signed main(){
cin>>n>>q;
for(int i=1;i<=n;i++)cin>>a[i],b[i]=a[i]-a[i-1];
dfs(1,n,1);
for(int i=1;i<=q;i++){
cin>>c>>d>>e;
if(c=='C'){
cin>>kw;
ch2(1,d,d);
kw=-kw;
if(e<n)ch2(1,e+1,e+1);
}else{
cout<<abs(__gcd(ch3(1,1,d),abs(ch(1,d+1,e))))<<endl;
}
}
return 0;
}
被老师盖飞了:“你这个线段树重写一下吧。”