rt
#include <iostream>
#define maxn 1000010
using namespace std;
struct node {
int l,r;
int sum = 0;
int add = 0;
int flag = false;
} a[maxn];
int q[maxn];
int p1[maxn] = {0};
int n,q1;
int sum;
//bool flag[maxn] = {false};
void build(int l,int r,int p) {
a[p].l = l;
a[p].r = r;
if(l == r) {
a[p].sum = 0;
return;
}
int mid = (l + r) / 2;
build(l,mid,p*2);
build(mid+1,r,p*2+1);
a[p].sum = a[p*2].sum + a[p*2+1].sum;
return;
}
void spread(int p) {
if(a[p].add) {
if(a[p * 2 + 1].flag ==true) { //被打爆了
a[p*2+1].sum += (a[p*2+1].r - a[p*2+1].l + 1) * a[p].add * 2;
} else {
a[p*2+1].sum += (a[p*2+1].r - a[p*2+1].l + 1) * a[p].add;
if(a[p*2 + 1].sum > q[p*2+1]) a[p*2 + 1].flag = true;
}
if(a[p * 2].flag ==true) { //被打爆了
a[p*2].sum += (a[p*2].r - a[p*2].l + 1) * a[p].add * 2;
} else {
a[p*2].sum += (a[p*2].r - a[p*2].l + 1) * a[p].add;
if(a[p*2].sum > q[p*2]) a[p*2].flag = true;
}
a[p*2].add += a[p].add;
a[p*2+1].add += a[p].add;
a[p].add = 0;
}
}
void change(int p,int l,int r,int x) {
if(l <= a[p].l && r >= a[p].r) {
a[p].add += x;
a[p].sum += x * (a[p].r - a[p].l + 1);
if(a[p].sum > q[p]) a[p].flag = true;
return;
}
spread(p);
int mid = (a[p].l + a[p].r) / 2;
if(l <= mid) {
change(p*2,l,r,x);
}
if(r > mid) {
change(p*2+1,l,r,x);
}
a[p].sum = a[p*2].sum + a[p*2+1].sum;
return;
}
int query(int p,int x) {
if(a[p].l == a[p].r) {
return a[p].sum;
}
spread(p);
int mid = (a[p].l + a[p].r) / 2;
if(mid >= x) {
return query(p*2,x);
}
if(mid < x) {
return query(p*2+1,x);
}
}
int main() {
cin >> n >> q1;
for(int i = 1; i <= n; i++) {
cin >> q[i];
}
build(1,n,1);
char ch;
int l,r,a,x;
for(int i = 1; i <= q1; i++) {
cin >> ch;
if(ch == 'A') {
cin >> l >> r >> a;
change(1,l,r,a);
} else {
cin >> x;
sum += query(1,x);;
}
}
cout << sum << endl;
return 0;
}