#include<bits/stdc++.h>
#define swp(a,b) ((a)^=(b)^=(a)^=(b))
using namespace std;
stack<int> s;
int rt,x,y,z,a[500005];
struct node
{
int lc,rc,sz,w,cov,rnd;
bool revlzy,covlzy;
int sum,mxsum,mxprv,mxnxt;
}bl[500005];
int nd_init(int w=0)
{
int u=s.top();
s.pop();
bl[u]={0,0,1,w,0,rand(),false,false,w,w,max(0,w),max(0,w)};
return u;
}
void pushup(int u)
{
if(u)
{
bl[u].sz=bl[bl[u].lc].sz+bl[bl[u].rc].sz+1;
bl[u].sum=bl[bl[u].lc].sum+bl[bl[u].rc].sum+bl[u].w;
bl[u].mxprv=max(0,max(bl[bl[u].lc].mxprv,bl[bl[u].lc].sum+bl[u].w+bl[bl[u].rc].mxprv));
bl[u].mxnxt=max(0,max(bl[bl[u].rc].mxnxt,bl[bl[u].rc].sum+bl[u].w+bl[bl[u].lc].mxnxt));
bl[u].mxsum=max(max(bl[u].w,bl[u].w+bl[bl[u].lc].mxnxt+bl[bl[u].rc].mxprv),max(bl[bl[u].lc].mxsum,bl[bl[u].rc].mxsum));
}
}
void rev(int u)
{
if(u)
{
swap(bl[u].lc,bl[u].rc);
swap(bl[u].mxprv,bl[u].mxnxt);
bl[u].revlzy^=1;
}
}
void cov(int u,int w)
{
bl[u].w=bl[u].cov=w;
bl[u].sum=bl[u].sz*w;
bl[u].mxprv=bl[u].mxnxt=max(0,bl[u].sum);
bl[u].mxsum=max(w,bl[u].sum);
bl[u].covlzy=true;
}
void pushdown(int u)
{
if(u)
{
if(bl[u].revlzy)
{
rev(bl[u].lc);
rev(bl[u].rc);
bl[u].revlzy=false;
}
if(bl[u].covlzy)
{
cov(bl[u].lc,bl[u].cov);
cov(bl[u].rc,bl[u].cov);
bl[u].covlzy=false;
}
}
}
void split(int u,int rk,int &x,int &y)
{
if(!u)
{
x=y=0;
return;
}
pushdown(u);
if(bl[bl[u].lc].sz<rk)
{
x=u;
split(bl[x].rc,rk-bl[bl[u].lc].sz-1,bl[x].rc,y);
pushup(x);
}
else
{
y=u;
split(bl[y].lc,rk,x,bl[y].lc);
pushup(y);
}
}
int merge(int u,int v)
{
if(!u||!v)return u+v;
if(bl[u].rnd<bl[v].rnd)
{
pushdown(u);
bl[u].rc=merge(bl[u].rc,v);
pushup(u);
return u;
}
else
{
pushdown(v);
bl[v].lc=merge(u,bl[v].lc);
pushup(v);
return v;
}
}
void del(int u)
{
if(u)
{
s.push(u);
del(bl[u].lc);
del(bl[u].rc);
}
}
int build(int l,int r)
{
if(l==r)return nd_init(a[l]);
int mid=l+r>>1;
return merge(build(l,mid),build(mid+1,r));
}
int main()
{
srand(time(0));
bl[0].mxsum=bl[0].mxprv=bl[0].mxnxt=0xc0c0c0c0;
int n,m,posi,tot,c;
string op;
cin>>n>>m;
for(int i=500000;i;i--)s.push(i);
for(int i=1;i<=n;i++)cin>>a[i];
rt=merge(rt,build(1,n));
while(m--)
{
cin>>op;
if(op=="INSERT")
{
cin>>posi>>tot;
for(int i=1;i<=tot;i++)cin>>a[i];
split(rt,x,y,posi);
rt=merge(merge(x,build(1,tot)),y);
}
if(op=="DELETE")
{
cin>>posi>>tot;
split(rt,posi-1,x,y);
split(y,tot,y,z);
del(y);
rt=merge(x,z);
}
if(op=="MAKE-SAME")
{
cin>>posi>>tot>>c;
split(rt,posi-1,x,y);
split(y,tot,y,z);
cov(y,c);
rt=merge(merge(x,y),z);
}
if(op=="REVERSE")
{
cin>>posi>>tot;
split(rt,posi-1,x,y);
split(y,tot,y,z);
rev(y);
rt=merge(merge(x,y),z);
}
if(op=="GET-SUM")
{
cin>>posi>>tot;
split(rt,posi-1,x,y);
split(y,tot,y,z);
cout<<bl[y].sum<<'\n';
rt=merge(merge(x,y),z);
}
if(op=="MAX-SUM")cout<<bl[rt].mxsum<<'\n';
}
}