rt
#include<bits/stdc++.h>
#define N 100005
#define LL long long
using namespace std;
LL L[N<<2],R[N<<2],num[N<<2],tag[N<<2];
LL a[N<<2];
void add(LL,LL,LL,LL),build(LL,LL,LL),sp(LL);
LL sum(LL,LL,LL);
int main(){
LL n,m;
scanf("%lld%lld",&n,&m);
for(LL i=1;i<=n;++i)
scanf("%lld",&a[i]);
build(1,1,n);
for(LL i=1;i<=m;++i){
LL z,x,y; LL k;
scanf("%lld%lld%lld",&z,&x,&y);
if(z&1){
scanf("%lld",&k);
add(1,x,y,k);
}
else
printf("%lld\n",sum(1,x,y));
}
return 0;
}
void build(LL n,LL l,LL r){
L[n]=l,R[n]=r;
if(l==r){
num[n]=a[l];
return ;
}
LL mi=(l+r)>>1;
build(n<<1,l,mi);
build((n<<1)+1,mi+1,r);
num[n]=num[n<<1]+num[(n<<1)+1];
return ;
}
void sp(LL n){
LL l=L[n],r=R[n],mi=(l+r)>>1,k=tag[n];
if(k){
num[n<<1]+=(mi-l+1)*k,tag[n<<1]+=k;
num[(n<<1)+1]+=(r-mi)*k,tag[(n<<1)+1]+=k;
tag[n]=0;
}
return ;
}
void add(LL n,LL x,LL y,LL k){
LL l=L[n],r=R[n];
if(x>r||y<l)
return ;
sp(n);
if(l>=x&&r<=y){
num[n]+=(r-l+1)*k;
tag[n]+=k;
return ;
}
add(n<<1,x,y,k);
add((n<<1)+1,x,y,k);
num[n]=num[n<<1]+num[(n<<1)+1];
}
LL sum(LL n,LL x,LL y){
LL l=L[n],r=R[n];
if(x>r||y<l)
return 0;
if(l>=x&&r<=y)
return num[n];
sp(n);
LL su1=sum(n<<1,x,y);
LL su2=sum((n<<1)+1,x,y);
num[n]=num[n<<1]+num[(n<<1)+1];
return su1+su2;
}