#include<stdio.h>
using namespace std;
long long n,m;
long long sum[1000000];
long long bj[100000];
void jt(long long l,long long r,long long rt){
if(l==r){
scanf("%d",&sum[rt]);
return;
}
long long m=(l+r)>>1;
jt(l,m,rt<<1);
jt(m+1,r,rt<<1|1);
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
return;
}
void f(long long l,long long r,long long rt,long long k){
bj[rt]+=k;
sum[rt]+=k*(r-l+1);
return;
}
void push_down(long long l,long long r,long long rt){
long long m=(l+r)>>1;
f(l,m,rt<<1,bj[rt]);
f(m+1,r,rt<<1|1,bj[rt]);
bj[rt]=0;
return;
}
long long cx(long long l,long long r,long long rt,long long x,long long y){
if(l>=x&&r<=y){
return sum[rt];
}
long long m=(l+r)>>1;
push_down(l,r,rt);
long long ans=0;
if(m>=x) ans+=cx(l,m,rt<<1,x,y);
if(m<y) ans+=cx(m+1,r,rt<<1|1,x,y);
return ans;
}
void xg(long long l,long long r,long long rt,long long x,long long y,long long z){
if(l>=x&&r<=y){
sum[rt]+=(r-l+1)*z;
bj[rt]+=z;
return;
}
push_down(l,r,rt);
long long m=(l+r)>>1;
if(m>=x) xg(l,m,rt<<1,x,y,z);
if(m<y) xg(m+1,r,rt<<1|1,x,y,z);
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
return;
}
int main(){
scanf("%d%d",&n,&m);
jt(1,n,1);
long long x,y,z,s;
for(long long i=1;i<=m;i++){
scanf("%d%d%d",&s,&x,&y);
if(s==1){
scanf("%d",&z);
xg(1,n,1,x,y,z);
}
else{
printf("%d\n",cx(1,n,1,x,y));
}
}
return 0;
}