#include<bits/stdc++.h>
using namespace std;
#define N 1000500
#define ed puts("")
#define pn puts("No")
#define int long long
#define py puts("Yes")
#define mod 1000000007
#define p_ putchar(' ')
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int ksm(int a,int b,int p){
int ans=1%p;
while(b>0){
if(b&1) ans=ans*a%p;
a=a*a%p,b>>=1;
}
return ans%p;
}
int mod1(int x,int p){
return (x%p+p)%p;
}
int n,m,a[N],sum[N<<2],add[N<<2],id,x,y,k;
void pushup(int rt){
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void build(int rt,int l,int r){
if(l==r){
sum[rt]=a[l];
return;
}
int mid=l+r>>1;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
pushup(rt);
}
void pushdown(int rt,int ln,int rn){
if(add[rt]){
add[rt<<1]+=add[rt];
add[rt<<1|1]+=add[rt];
sum[rt<<1]+=add[rt]*ln;
sum[rt<<1|1]+=add[rt]*rn;
add[rt]=0;
}
}
void update(int rt,int l,int r,int L,int R,int c){
if(L<=l&&r<=R){
sum[rt]+=c*(r-l+1);
add[rt]+=c;
return ;
}
int mid=l+r>>1;
pushdown(rt,mid-l+1,r-m);
if(L<=mid) update(rt<<1,l,mid,L,R,c);
if(R>mid) update(rt<<1|1,mid+1,r,L,R,c);
pushup(rt);
}
int query(int rt,int l,int r,int L,int R){
if(L<=l&&r<=R) return sum[rt];
int mid=l+r>>1;
pushdown(rt,mid-l+1,r-mid);
int ans=0;
if(L<=mid) ans+=query(rt<<1,l,mid,L,R);
if(R>mid) ans+=query(rt<<1|1,mid+1,r,L,R);
return ans;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;++i) a[i]=read();
build(1,1,n);
for(int i=1;i<=m;++i){
id=read();
if(id==1){
x=read(),y=read(),k=read();
update(1,1,n,x,y,k);
}
else{
x=read(),y=read();
write(query(1,1,n,x,y)),ed;
}
}
return 0;
}