#include<bits/stdc++.h>
using namespace std;
const int N=100100;
int n,m,l,r,sum[N],lazy[N],a[N];
void pd(int wz,int l,int r) {
int mid=(r+l)>>1,lz=lazy[wz];
sum[wz>>1]+=lz*(mid-l);
sum[wz>>1|1]+=lz*(r-mid-1);
lazy[wz>>1]+=lz;
lazy[wz>>1|1]+=lz;lazy[wz]=0;
}
void update(int k,int zl,int zr,int add) {
if(l<=zl&&zr<=r) {
sum[k]+=add*(zr-zl+1);
lazy[k]+=add;
}
if(zl==zr) {
sum[k]=a[zl];
return ;
}
int mid=(zl+zr)>>1;
pd(k,zl,zr);
if(l<=mid)
update(k<<1,zl,mid,add);
if(r>mid)
update(k<<1|1,mid+1,zr,add);
sum[k]=sum[k<<1]+sum[k<<1|1];
}
void build(int k,int l,int r) {
if(l==r) {
sum[k]=a[l]; return ;
}
int mid=(r+l)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
sum[k]=sum[k<<1]+sum[k<<1|1];
}
int qiu(int k,int zl,int zr) {
if(l<=zl&&zr<=r) {
return sum[k];
}
if(zr==zl)return sum[k];
int mid=(zl+zr)>>1,ans=0;
pd(k,zl,zr);
if(l<=mid)
ans+=qiu(k<<1,zl,mid);
if(r>mid)
ans+=qiu(k<<1|1,mid+1,zr);
return ans;
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
build(1,1,n);
for(int i=1; i<=m; i++) {
int o,c;
cin>>o;
if(o==1) {
cin>>l>>r>>c;
update(1,1,n,c);
}
if(o==2) {
cin>>l>>r;
cout<<qiu(1,1,n)<<endl;;
}
}
return 0;
}