#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn = 1000001;
int n,m,sum[maxn],a[maxn],add[maxn];
void build(int k,int l,int r){
if(l==r){
sum[l]=a[k];
return ;
}
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1+1,mid+1,r);
sum[k]=sum[k<<1+1]+sum[k<<1];
}
void quary(int k,int l,int r,int x,int y,int p){
if(x<=l&&y>=r){
add[k]+=p;
return;
}
sum[k]+=(min(y,r)-max(l,x)+1)*p;
int mid=(l+r)>>1;
quary(k<<1,l,mid,x,y,p);
quary(k<<1+1,mid+1,r,x,y,p);
}
int ask(int k,int l,int r,int x,int y){
if(x<=l&&y>=r){
return add[k]*(r-l+1)+sum[k];
}
int res=(min(y,r)-max(l,x)+1)*add[k];
int mid=(l+r)>>1;
res+=ask(k<<1,l,mid,x,y);
res+=ask(k<<1+1,mid+1,r,x,y);
return res;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,1,n);
for(int i=1;i<=m;i++){
int pd; cin>>pd;
if(pd==1){
int x,y,k;
cin>>x>>y>>k;
quary(1,1,n,x,y,k);
}
if(pd==2){
int x,y;
cin>>x>>y;
cout<<ask(1,1,n,x,y)<<endl;
}
}
return 0;
}