#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,m,type,x,y,kk,st[4*N],a[N],tag[4*N];
void build(int s,int t,int k){
if(s==t){
st[k]=a[s];
return ;
}
int mid=s+(t-s)/2;
build(s,mid,2*k);
build(mid+1,t,2*k+1);
st[k]=st[k*2]+st[k*2+1];
return ;
}
void update(int l,int r,int s,int t,int k,int num){
if(l<=s&&t<=r){
st[k]+=(t-s+1)*num,tag[k]=num;
return ;
}
if(l>t||r<s) return ;
int mid=s+(t-s)/2;
if(tag[k]&&s!=t){
st[k*2]+=tag[k]*(mid-s+1);
st[k*2+1]+=tag[k]*(t-mid);
tag[k*2]+=tag[k];
tag[k*2+1]+=tag[k];
tag[k]=0;
}
if(l<=mid) update(l,r,s,mid,k*2,num);
if(r>mid) update(l,r,mid+1,t,k*2+1,num);
st[k]=st[k*2]+st[k*2+1];
return ;
}
int getsum(int l,int r,int s,int t,int k){
if(l<=s&&r>=t){
return st[k];
}
if(l>t||r<s) return 0;
int mid=s+(t-s)/2;
if(tag[k]&&s!=t){
st[k*2]+=tag[k]*(mid-s+1);
tag[k*2]+=tag[k];
st[k*2+1]+=tag[k]*(t-mid);
tag[k*2+1]+=tag[k];
tag[k]=0;
}
int res=0;
if(l<=mid) res+=getsum(l,r,s,mid,k*2);
if(r>mid) res+=getsum(l,r,mid+1,t,k*2+1);
return res;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,n,1);
while(m--){
cin>>type;
if(type==1){
cin>>x>>y>>kk;
update(x,y,1,n,1,kk);
}else{
cin>>x>>y;
cout<<getsum(x,y,1,n,1)<<endl;
}
}
return 0;
}