#include<bits/stdc++.h>
using namespace std;
int n,a[500000],lazy[200000],t[200000],fl,fr,v,m,q;
void build(int l,int r,int ro){
if(l==r){
t[ro]=a[l];
return ;
}
int mid=l+r>>1;
build(l,mid,ro*2);
build(mid+1,r,ro*2+1);
t[ro]=t[ro*2]+t[ro*2+1];
}
int gs(int l,int r,int ro){
if(fl<=l && r<=fr) return t[ro];
int mid=l+r>>1,s=0;
if(fl<=mid) s+=gs(l,mid,ro*2);
if(fr>mid) s+=gs(mid+1,r,ro*2+1);
return s;
}
void qjxg(int l,int r,int ro){
if(fl<=l && r<=fr){
t[ro]=(r-l+1)*v,lazy[ro]+=v;
return ;
}
int mid=l+r>>1;
if(lazy[ro]){
t[ro*2]+=lazy[ro]*(mid-l+1),lazy[ro*2]+=lazy[ro];
t[ro*2+1]+=lazy[ro]*(r-mid),lazy[ro*2+1]+=lazy[ro];
lazy[ro]=0;
}
if(fl<=mid) qjxg(l,mid,ro*2);
if(fr>mid) qjxg(mid+1,r,ro*2+1);
t[ro]=t[ro*2]+t[ro*2+1];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
build(1,n,1);
while(m--){
scanf("%d %d %d",&q,&fl,&fr);
if(q==1){
scanf("%d",&v);
qjxg(1,n,1);
}
else cout<<gs(1,n,1)<<endl;
memset(lazy,0,sizeof(lazy));
}
return 0;
}