#include using namespace std; const int N=100005; int n,q; long long a[N],s[4*N],M[4*N],m[4*N],L[4*N]; long long g(long long a,long long b){while(b){long long t=a%b;a=b;b=t;}return a;} void p(int o,int l,int r){if(L[o]!=-1){int mid=(l+r)>>1;L[o<<1]=L[o];s[o<<1]=L[o]*(mid-l+1);M[o<<1]=L[o];m[o<<1]=L[o];L[o<<1|1]=L[o];s[o<<1|1]=L[o]*(r-mid);M[o<<1|1]=L[o];m[o<<1|1]=L[o];L[o]=-1;}} void u(int o,int l,int r){s[o]=s[o<<1]+s[o<<1|1];M[o]=max(M[o<<1],M[o<<1|1]);m[o]=min(m[o<<1],m[o<<1|1]);} void b(int o,int l,int r){L[o]=-1;if(l==r){s[o]=a[l];M[o]=a[l];m[o]=a[l];return;}int mid=(l+r)>>1;b(o<<1,l,mid);b(o<<1|1,mid+1,r);u(o,l,r);} void u1(int o,int l,int r,int ql,int qr,long long x){if(ql<=l&&r<=qr){L[o]=x;s[o]=x*(r-l+1);M[o]=x;m[o]=x;return;}if(L[o]!=-1&&l>1;if(ql<=mid)u1(o<<1,l,mid,ql,qr,x);if(qr>mid)u1(o<<1|1,mid+1,r,ql,qr,x);u(o,l,r);} void u2(int o,int l,int r,int ql,int qr,long long x){if(L[o]!=-1&&l>1;u2(o<<1,l,mid,ql,qr,x);u2(o<<1|1,mid+1,r,ql,qr,x);u(o,l,r);return;}int mid=(l+r)>>1;if(ql<=mid)u2(o<<1,l,mid,ql,qr,x);if(qr>mid)u2(o<<1|1,mid+1,r,ql,qr,x);u(o,l,r);} long long q3(int o,int l,int r,int ql,int qr){if(ql<=l&&r<=qr)return M[o];if(L[o]!=-1&&l>1;long long res=0;if(ql<=mid)res=max(res,q3(o<<1,l,mid,ql,qr));if(qr>mid)res=max(res,q3(o<<1|1,mid+1,r,ql,qr));return res;} long long q4(int o,int l,int r,int ql,int qr){if(ql<=l&&r<=qr)return s[o];if(L[o]!=-1&&l>1;long long res=0;if(ql<=mid)res+=q4(o<<1,l,mid,ql,qr);if(qr>mid)res+=q4(o<<1|1,mid+1,r,ql,qr);return res;} int main(){scanf("%d%d",&n,&q);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);b(1,1,n);while(q--){int o,l,r;long long x;scanf("%d%d%d",&o,&l,&r);if(o==1){scanf("%lld",&x);u1(1,1,n,l,r,x);}else if(o==2){scanf("%lld",&x);u2(1,1,n,l,r,x);}else if(o==3)printf("%lld\n",q3(1,1,n,l,r));else if(o==4)printf("%lld\n",q4(1,1,n,l,r));}return 0;}