#include<bits/stdc++.h>
#define int long long
int sum[100005],arr[100005],add[100005];
int n,m,c,a,b,k,ans;
bool update[10005];
void lazy(int x,int y,int i)
{
sum[x]=y*i;
add[x]=y;
update[x]=true;
}
void up(int i)
{
sum[i]=sum[i*2]+sum[i*2+1];
}
void down(int i,int ln,int rn)
{
if(update[i])
{
lazy(i*2,add[i],ln);
lazy(i*2+1,add[i],rn);
update[i]=false;
}
}
int build(int l,int r,int i)
{
if(l==r)
{
return sum[i]=arr[l];
}
else
{
int mid=(r+l)/2;
build(l,mid,i*2);
build(mid+1,r,i*2+1);
up(i);
}
add[i]=0;
update[i]=false;
}
int search(int i,int jobl,int jobr,int l,int r)
{
if(jobl<=l&&r<=jobr)
{
return sum[i];
}
else {
int mid=(l+r)/2;
down(i,mid-l+1,r-mid);
if(jobl<=mid)
{
ans+=search(i*2,jobl,jobr,l,mid);
}
if(jobr>mid)
{
ans+=search(i*2+1,jobl,jobr,mid+1,r);
}
}return ans;
}
void addn(int jobl,int jobr,int jobv,int l,int r,int i)
{
if(jobl<=l&&r<=jobr)
{
lazy(i,jobv,r-l+1);
}
else
{int mid=(r+l)/2;
down(i,mid-l+1,r-mid);
if(jobl<=mid){addn(jobl,jobr,jobv,l,mid,i*2);
}
if(jobl>mid){ addn(jobl,jobr,jobv,mid+1,r,i*2+1);
}
}
}
signed main(){
scanf("%lld %lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld",&arr[i]);
}
build(1,n,1);
for(int i=1;i<=m;i++)
{
scanf("%lld %lld %lld",&c,&a,&b);
if(c==1)
{
scanf("%lld",&k);
addn(1,n,k,c,a,1);
}
if(c==2)
{
search(1,1,n,a,b);
printf("%lld\n",ans);
ans=0;
}
}
return 0;
}