# include <cstdio>
# include <iostream>
# include <set>
# include <map>
# include <vector>
# include <list>
# include <queue>
# include <stack>
# include <cstring>
# include <string>
# include <cstdlib>
# include <cmath>
# include <algorithm>
using namespace std ;
const int maxn = 110000 ;
long long summ ;
struct Tree
{
long long sum ;
long long flag ;
} tree [ maxn * 4 ] ;
void pushup ( int pos )
{
tree [ pos ] . sum = tree [ pos * 2 ] . sum + tree [ pos * 2 + 1 ] . sum ;
}
void pushdown ( int l , int r , int pos )
{
int m = ( l + r ) / 2 ;
long long val = tree [ pos ] . flag ;
tree [ pos ] . flag = 0 ;
tree [ pos * 2 ] . sum += ( m - l + 1 ) * val ;
tree [ pos * 2 + 1 ] . sum += ( r - m ) * val ;
tree [ pos * 2 ] . flag += val ;
tree [ pos * 2 + 1 ] . flag += val ;
}
void build ( int l , int r , int pos )
{
if ( l == r )
{
scanf ( "%lld" , & tree [ pos ] . sum ) ;
return ;
}
int m = ( l + r ) / 2 ;
build ( l , m , pos * 2 ) ;
build ( m + 1 , r , pos * 2 + 1 ) ;
pushup ( pos ) ;
}
void update ( int l , int r , int pos , int L , int R , long long val )
{
if ( l >= L && r <= R )
{
tree [ pos ] . flag += val ;
tree [ pos ] . sum += val * ( r - l + 1 ) ;
return ;
}
if ( tree [ pos ] . flag )
pushdown ( l , r , pos ) ;
int m = ( l + r ) / 2 ;
if ( m >= L )
update ( l , m , pos * 2 , L , R , val ) ;
if ( m + 1 <= R )
update ( m + 1 , r , pos * 2 + 1 , L , R , val ) ;
pushup ( pos ) ;
}
void quer ( int l , int r , int pos , int L , int R )
{
if ( l >= L && r <= R )
{
summ += tree [ pos ] . sum ;
return ;
}
if ( tree [ pos ] . flag )
pushdown ( l , r , pos ) ;
int m = ( l + r ) / 2 ;
if ( m >= L )
quer ( l , m , pos * 2 , L , R ) ;
if ( m + 1 <= R )
quer ( m + 1 , r , pos * 2 + 1 , L , R ) ;
}
int main ( )
{
int n , q ;
scanf ( "%d%d" , & n , & q ) ;
build ( 1 , n , 1 ) ;
getchar ( ) ;
while ( q -- )
{
char c ;
c = getchar ( ) ;
if ( c == 'Q' )
{
int a , b ;
scanf ( "%d%d" , & a , & b ) ;
summ = 0 ;
quer ( 1 , n , 1 , a , b ) ;
printf ( "%lld\n" , summ ) ;
}
else
{
int a , b ;
long long c ;
scanf ( "%d%d%lld" , & a , & b , & c ) ;
update ( 1 , n , 1 , a , b , c ) ;
}
getchar ( ) ;
}
}