#include<bits/stdc++.h>
#define mid (l+r>>1)
#define ls (p<<1)
#define rs (p<<1|1)
using namespace std;
void build(int p,int l,int r);
void push_up(int p);
void push_down(int p,int l,int r);
void mul(int p,int l,int r,int w);
void add(int p,int l,int r);
int ask(int p,int l,int r);
const int N=1e5+2;
int n,m,op,x,y,k,a[N],s[N<<2],t[N<<2];
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++)
{
cin>>op>>x>>y;
if(op==1)
{
cin>>k;
add(1,1,n);
}
else
cout<<ask(1,1,n)<<"\n";
}
return 0;
}
void build(int p,int l,int r)
{
if(l==r)
{
s[p]=a[p];
return;
}
build(ls,l,mid);
build(rs,mid+1,r);
push_up(p);
}
void push_up(int p)
{s[p]=s[ls]+s[rs];}
void push_down(int p,int l,int r)
{
if(!t[p])
return;
mul(ls,l,mid,t[p]);
mul(rs,mid+1,r,t[p]);
t[p]=0;
}
void mul(int p,int l,int r,int w)
{s[p]+=(r-l+1)*w,t[p]=w;}
void add(int p,int l,int r)
{
if(l>y||r<x)
return;
if(l>=x&&r<=y)
{
mul(p,l,r,k);
return;
}
push_down(p,l,r);
add(ls,l,mid);
add(rs,mid+1,r);
push_up(p);
}
int ask(int p,int l,int r)
{
if(l>y||r<x)
return 0;
if(l>=x&&r<=y)
return s[p];
push_down(p,l,r);
return ask(ls,l,mid)+ask(rs,mid+1,r);
}