RT,AC#1,#3,其余WA
#include<bits/stdc++.h>
using namespace std;
//#define debug puts("I AK IOI");
#define int long long
#define pl (p>>1)
#define pr ((p>>1)|1)
const int N=1e6+1000,inf=LONG_LONG_MAX;
int n,q,op,l,r,x,a[N],tr[N<<2],lz1[N<<2],lz2[N<<2];
void push_down(int p){
if(lz1[p]!=inf)tr[pl]=lz1[pl]=tr[pr]=lz1[pr]=lz1[p],lz2[pl]=lz2[pr]=0,lz1[p]=inf;
lz2[pl]+=lz2[p],lz2[pr]+=lz2[p],tr[pl]+=lz2[p],tr[pr]+=lz2[p],lz2[p]=0;
}void push_up(int p){
tr[p]=max(tr[pl],tr[pr]);
}void update1(int l,int r,int le,int ri,int v,int p){
if(l==le&&r==ri)return lz1[p]=v,lz2[p]=0,tr[p]=v,void();
int mid=l+r>>1;
push_down(p);
if(ri<=mid)update1(l,mid,le,ri,v,pl);
else if(le>mid)update1(mid+1,r,le,ri,v,pr);
else update1(l,mid,le,mid,v,pl),update1(mid+1,r,mid+1,ri,v,pr);
push_up(p);
}void update2(int l,int r,int le,int ri,int v,int p){
if(l==le&&r==ri)return lz2[p]+=v,tr[p]+=v,void();
int mid=l+r>>1;
push_down(p);
if(ri<=mid)update2(l,mid,le,ri,v,pl);
else if(le>mid)update2(mid+1,r,le,ri,v,pr);
else update2(l,mid,le,mid,v,pl),update2(mid+1,r,mid+1,ri,v,pr);
push_up(p);
}int query(int l,int r,int le,int ri,int p){
if(l==le&&r==ri)return tr[p];
int mid=l+r>>1,ret;
push_down(p);
if(ri<=mid)ret=query(l,mid,le,ri,pl);
else if(le>mid)ret=query(mid+1,r,le,ri,pr);
else ret=max(query(l,mid,le,mid,pl),query(mid+1,r,mid+1,ri,pr));
return ret;
}void build(int l,int r,int p){
lz1[p]=inf;
if(l==r)return tr[p]=a[l],void();
int mid=l+r>>1;
build(l,mid,pl),build(mid+1,r,pr),push_up(p);
}signed main(){
ios::sync_with_stdio(0);cin.tie(),cout.tie();
cin>>n>>q;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,n,1);
while(q--){
cin>>op;
if(op==1)cin>>l>>r>>x,update1(1,n,l,r,x,1);
else if(op==2)cin>>l>>r>>x,update2(1,n,l,r,x,1);
else cin>>l>>r,cout<<query(1,n,l,r,1)<<'\n';
}return 0;
}