#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000001*4
unsigned long long ans[N],n,m,a[N],tag[N];
inline ll ls(ll u){return u<<1;}inline ll rs(int u){return u<<1|1;}
inline ll pushup(ll u){ans[u]=ans[ls(u)]+ans[rs(u)];}
void build(ll u,ll l,ll r){
tag[u]=0;
if(l==r){ans[u]=a[l];return;}
ll mid=(l+r)>>1;
build(u<<1,l,mid);build(u<<1|1,mid+1,r);
pushup(u);
}
inline void f(ll u,ll l,ll r,ll k){ans[u]=ans[u]+k*(r-l+1);tag[u]=tag[u]+k;}
inline void pushdown(ll u,ll l,ll r){
ll mid=(l+r)>>1;
f(u<<1,l,mid,tag[u]);f(u<<1|1,mid+1,r,tag[u]);
tag[u]=0;
}
inline void update(ll u,ll nl,ll nr,ll l,ll r,ll k){
if(nl<=l&&r<=nr){ans[u]+=k*(r-l+1);tag[u]+=k;return;}
pushdown(u,l,r);ll mid=(l+r)>>1;
if(nl<=mid)update(ls(u),nl,nr,l,mid,k);
if(nr>mid)update(rs(u),nl,nr,mid+1,r,k);
pushup(u);
}
ll query(ll u,ll nl,ll nr,ll l,ll r){
ll res=0;
if(nl<=l&&r<=nr)return ans[u];
ll mid=(l+r)>>1;pushdown(u,l,r);
if(nl<=mid)res+=query(ls(u),nl,nr,l,mid);
if(nr>mid)res+=query(rs(u),nl,nr,mid+1,r);
return res;
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
ll p,b,c,d,e,f;
cin>>n>>m;
for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
build(1,1,n);
while(m--){
cin>>p;
switch(p){
case 1:{scanf("%lld%lld%lld",&b,&c,&d);update(1,b,c,1,n,d);break;}
case 2:{scanf("%lld%lld",&e,&f);printf("%lld\n",query(1,e,f,1,n));break;}
}
}
return 0;
}