#include<iostream>
#include<cmath>
using namespace std;
#define int long long
long long a[100005],t[400005],tag[400005];
void build(int l,int r,int now){
if(l==r) t[now]=a[l];
else{
int mid=(l+r)>>1;
build(l,mid,now*2);
build(mid+1,r,now*2+1);
t[now]=t[now*2]+t[now*2+1];
}
}
void push_down(int l,int r,int now){
int mid=(l+r)>>1;
t[now*2]+=(mid-l+1)*tag[now];
tag[now*2]=tag[now];
t[now*2+1]+=(r-mid)*tag[now];
tag[now*2+1]=tag[now];
}
long long find(int l,int r,int o,int p,int now){
if(l<=o&&r>=p) return t[now];
else{
if(tag[now]!=0){
push_down(o,p,now);
tag[now]=0;
}
int mid=(o+p)>>1;
long long res=0;
if(mid>=l) res+=find(l,r,o,mid,now*2);
if(mid<r) res+=find(l,r,mid+1,p,now*2+1);
return res;
}
}
void add(int l,int r,int o,int p,long long num,int now){
if(l<=o&&p<=r){
t[now]+=(p-o+1)*num;
tag[now]=num;
}
else{
if(tag[now]!=0){
push_down(o,p,now);
tag[now]=0;
}
int mid=(o+p)>>1;
if(mid>=l) add(l,r,o,mid,num,now*2);
if(mid<r) add(l,r,mid+1,p,num,now*2+1);
t[now]=t[now*2]+t[now*2+1];
}
}
int n,m,op;
long long x,y,k;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,n,1);
for(int i=1;i<=m;i++){
cin>>op;
if(op==1){
cin>>x>>y>>k;
add(x,y,1,n,k,1);
}
if(op==2){
cin>>x>>y;
cout<<find(x,y,1,n,1)<<endl;
}
}
return 0;
}