#include<iostream>
using namespace std;
namespace IO{
struct INID{INID(){ios::sync_with_stdio(false);cin.tie(nullptr);}};
static INID INI_D;
inline int gc(){return cin.rdbuf()->sbumpc();}
inline void pc(char c){cout.rdbuf()->sputc(c);}
template<typename T>inline void rd(T& x){
x=0;int f=1,c=gc();
while('0'>c||c>'9'){if(c==EOF){cerr<<"IIE\n";exit(EXIT_FAILURE);}if(c=='-'){f*=-1;}c=gc();}
while('0'<=c&&c<='9'){x=x*10+c-'0';c=gc();}
x*=f;
}
template<typename T>inline void wt(T x){
if(x<0)pc('-');
static int stk[40],tp;
do{stk[++tp]=(x%10<0?-x%10:x%10)+'0';x/=10;}while(x);
while(tp)pc(stk[tp--]);
}
}
using namespace IO;
#define int long long
constexpr int N=2055;
int n,m;
struct bit2d{
int t[N][N];
inline int lowbit(int x){return x&(-x);}
inline void add(int x,int y,int val){
for(int i=x;i<=n;i+=lowbit(i)){
for(int j=y;j<=m;j+=lowbit(j)){
t[i][j]+=val;
}
}
}
inline int query(int x,int y){
int ret=0;
for(int i=x;i>0;i-=lowbit(i)){
for(int j=y;j>0;j-=lowbit(j)){
ret+=t[i][j];
}
}return ret;
}
}t1,t2,t3,t4;
inline void addSingle(int x,int y,int val){
t1.add(x,y,val);
t2.add(x,y,val*x);
t3.add(x,y,val*y);
t4.add(x,y,val*x*y);
}
inline void addMatrix(int x1,int y1,int x2,int y2,int val){
addSingle(x1,y1,val);
addSingle(x1,y2+1,-val);
addSingle(x2+1,y1,-val);
addSingle(x2+1,y2+1,val);
}
inline int querySingle(int x,int y){
int s1=t1.query(x,y);
int s2=t2.query(x,y);
int s3=t3.query(x,y);
int s4=t4.query(x,y);
return s4+(x+1)*(y+1)*s1-(x+1)*s3-(y+1)*s2;
}
inline int queryMatrix(int x1,int y1,int x2,int y2){
return
+querySingle(x2,y2)
-querySingle(x1-1,y2)
-querySingle(x2,y1-1)
+querySingle(x1-1,y1-1);
}
inline void global(){
}
namespace tqy{
inline void init(){
gc();
rd(n),rd(m);
}
inline void solve(){
char op;
while(cin>>op){
int x1,y1,x2,y2,val;
rd(x1),rd(y1),rd(x2),rd(y2);
if(x1>x2)swap(x1,x2);
if(y1>y2)swap(y1,y2);
if(op=='L'){
rd(val);
addMatrix(x1,y1,x2,y2,val);
}else{
wt(queryMatrix(x1,y1,x2,y2));
pc('\n');
}
}
}
}
signed main(){
global();
int T=1;
while(T--)tqy::init(),tqy::solve();
return 0;
}
/*
*/