#include <set>
#include <bitset>
#include <list>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <string>
#include <vector>
#include <ios>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <utility>
#include <complex>
#include <numeric>
#include <functional>
#include <cmath>
#include <ctime>
#include <climits>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cassert>
#define lson rt << 1, l, m
#define rson rt << 1 | 1, m + 1, r
using namespace std;
const int INF = 0x7FFFFFFF;
const double EPS = 1e-10;
const double PI = 2 * acos (0.0);
const int MOD = 10000007;
const int maxn = 100000 + 66;
long long lazy[maxn<<2];
long long sum[maxn<<2];
void PushUp (int rt)
{
sum[rt] = sum[rt<<1] + sum[rt<<1|1];
}
void PushDown (int rt, int l, int m, int r)
{
if (lazy[rt])
{
lazy[rt<<1] += lazy[rt];
lazy[rt<<1|1] += lazy[rt];
sum[rt<<1] += lazy[rt] * (m - l + 1);
sum[rt<<1|1] += lazy[rt] * (r - m);
lazy[rt] = 0;
}
}
void Build (int rt, int l, int r)
{
lazy[rt] = 0;
if (l == r)
{
scanf ("%lld", &sum[rt]);
return ;
}
int m = (l + r) >> 1;
PushDown (rt, l, m, r);
Build (lson);
Build (rson);
PushUp (rt);
}
void UpDate (int rt, int l, int r, int L, int R, int add)
{
if (L <= l && r <= R)
{
lazy[rt] += add;
sum[rt] += add * (r - l + 1);
return ;
}
int m = (l + r) >> 1;
PushDown (rt, l, m, r);
if (L <= m)
UpDate (lson, L, R, add);
if (R > m)
UpDate (rson, L, R, add);
PushUp (rt);
}
long long Query (int rt, int l, int r, int L, int R)
{
if (L <= l && r <= R)
{
return sum[rt];
}
int m = (l + r) >> 1;
PushDown (rt, l, m, r);
long long ans = 0;
if (L <= m)
ans += Query (lson, L, R);
if (R > m)
ans += Query (rson, L, R);
return ans;
}
int main()
{
// freopen ("aaa.txt", "r", stdin);
int n, q;
while (scanf ("%d%d", &n, &q) != EOF)
{
Build (1, 1, n);
int i, val_a, val_b, val;
char cmd[6];
for (i = 0; i < q; i++)
{
scanf ("%s%d%d", cmd, &val_a, &val_b);
if (cmd[0] == 'Q')
printf ("%lld\n", Query (1, 1, n, val_a, val_b));
else
{
scanf ("%d", &val);
UpDate (1, 1, n, val_a, val_b, val);
}
}
}
return 0;
}