#include<cstdio>
#define ll long long
using namespace std;
int d[1000001],b[1000001];
ll n,m,a[100001];
void build(ll l,ll r,ll p){
if(l==r){d[p]=a[l];return;}
ll m=(l+r)>>1;
build(l,m,p<<1);
build(m+1,r,(p<<1)+1);
d[p]=d[p<<1]+d[(p<<1)+1];
}
void add(ll l1,ll r1,ll l2,ll r2,ll c,ll p){
if(l1<=l2&&r2<=r1){d[p]+=(r2-l2+1)*c,b[p]+=c;return;}
ll m=(l2+r2)>>1;
if(b[p]&&l2!=r2){
d[p<<1]+=(m-l2+1)*b[p],d[(p<<1)+1]+=(r2-m)*b[p];
b[p<<1]=b[p],b[(p<<1)+1]=b[p],b[p]=0;
}
if(l1<=m)add(l1,r1,l2,m,c,p<<1);
if(m<r1)add(l1,r1,m+1,r2,c,(p<<1)+1);
d[p]=d[p<<1]+d[(p<<1)+1];
}
ll get(ll l1,ll r1,ll l2,ll r2,ll p){
if(l1<=l2&&r2<=r1)return d[p];
ll m=(l2+r2)>>1;
if(b[p]&&l2!=r2){
d[p<<1]+=(m-l2+1)*b[p],d[(p<<1)+1]+=(r2-m)*b[p];
b[p<<1]=b[p],b[(p<<1)+1]=b[p],b[p]=0;
}
ll sum=0;
if(l1<=m)sum+=get(l1,r1,l2,m,p<<1);
if(m<r1)sum+=get(l1,r1,m+1,r2,(p<<1)+1);
return sum;
}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)scanf("%lld",a+i);
build(1,n,1);
while(m--){
int op;
scanf("%d",&op);
if(op==1){
ll x,y,k;
scanf("%lld%lld%lld",&x,&y,&k);
add(x,y,1,n,k,1);
}else{
ll x,y;
scanf("%lld%lld",&x,&y);
printf("%lld\n",get(x,y,1,n,1));
}
}
return 0;
}