#include <bits/stdc++.h>
using namespace std;
#define ls(p) p << 1
#define rs(p) p << 1 | 1
const int N = 5e5 + 5;
int n, m;
int a[N], b[N];
struct Sgt {
int l, r;
int dat, sum;
#define l(p) t[p].l
#define r(p) t[p].r
#define dat(p) t[p].dat
#define sum(p) t[p].sum
} t[N << 2];
int gcd(int a, int b){
return (b == 0) ? a : gcd(b, a % b);
}
void update(int p) {
sum(p) = sum(ls(p)) + sum(rs(p));
dat(p) = gcd(abs(dat(ls(p))), abs(dat(rs(p))));
}
void build(int p, int l, int r) {
l(p) = l, r(p) = r;
if (l == r) {
dat(p) = sum(p) = b[l];
return;
}
int mid = l + r >> 1;
build(ls(p), l, mid);
build(rs(p), mid + 1, r);
update(p);
}
void change(int p, int x, int k) {
if (l(p) == r(p)) {
sum(p) += k, dat(p) += k;
return;
}
int mid = l(p) + r(p) >> 1;
if (x <= mid) change(ls(p), x, k);
else change(rs(p), x, k);
update(p);
}
int askgcd(int p, int l, int r) {
if (l <= l(p) && r >= r(p)) return dat(p);
int mid = l(p) + r(p) >> 1;
int val = 0;
if (l <= mid) val = gcd(abs(val), abs(askgcd(ls(p), l, r)));
if (r > mid) val = gcd(abs(val), abs(askgcd(rs(p), l, r)));
return val;
}
int asksum(int p, int l, int r) {
if (l <= l(p) && r >= r(p)) return sum(p);
int mid = l(p) + r(p) >> 1;
int val = 0;
if (l <= mid) val += asksum(ls(p), l, r);
if (r > mid) val += asksum(rs(p), l, r);
return val;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
b[i] = a[i] - a[i - 1];
}
build(1, 1, n);
for (int i = 1; i <= m; i++) {
char opt;
int l, r, d;
cin >> opt;
if (opt == 'C') {
cin >> l >> r >> d;
change(1, l, d);
if (r != n) change(1, r + 1, -d);
}
if (opt == 'Q') {
cin >> l >> r;
cout << abs(gcd(asksum(1, 1, l), askgcd(1, l + 1, r))) << "\n";
}
}
return 0;
}