#include<bits/stdc++.h>
#define N 500005
#define inf 2000000000
using namespace std;
string str;
int tot,rt,n,m,a,b,c,x,y,t;
int w[N],ch[N][2],val[N],num[N],sz[N];
int ls[N],rs[N],s[N],mx[N],l1[N],l2[N];
int st[N],top;
inline int read(){
int x=0,w=0; char c=0;
while(!isdigit(c)){w|=c=='-';c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return w?-x:x;
}
inline void pushup(int p){
if(!ch[p][0]&&!ch[p][1]){
sz[p]=1;
s[p]=ls[p]=rs[p]=mx[p]=val[p];
}else if(!ch[p][1]){
sz[p]=sz[ch[p][0]]+1;
s[p]=s[ch[p][0]]+val[p];
ls[p]=max(ls[ch[p][0]],s[p]);
rs[p]=max(0,rs[ch[p][0]])+val[p];
mx[p]=max(mx[ch[p][0]],rs[p]);
}else if(!ch[p][0]){
sz[p]=sz[ch[p][1]]+1;
s[p]=s[ch[p][1]]+val[p];
rs[p]=max(rs[ch[p][1]],s[p]);
ls[p]=max(0,ls[ch[p][1]])+val[p];
mx[p]=max(mx[ch[p][1]],ls[p]);
}else{
ls[p]=max(ls[ch[p][0]],s[ch[p][0]]+ls[ch[p][1]]+val[p]);
rs[p]=max(rs[ch[p][1]],s[ch[p][1]]+rs[ch[p][0]]+val[p]);
s[p]=s[ch[p][0]]+s[ch[p][1]]+val[p];
mx[p]=max(max(mx[ch[p][0]],mx[ch[p][1]]),rs[ch[p][0]]+val[p]+ls[ch[p][1]]);
sz[p]=sz[ch[p][0]]+sz[ch[p][1]]+1;
}
if(ls[p]<0) ls[p]=0;
if(rs[p]<0) rs[p]=0;
}
inline void pushdown(int p){
if(l1[p]){
l1[ch[p][0]]^=1;
l1[ch[p][1]]^=1;
swap(ch[ch[p][0]][0],ch[ch[p][0]][1]);
swap(ch[ch[p][1]][0],ch[ch[p][1]][1]);
swap(ls[ch[p][0]],rs[ch[p][0]]);
swap(ls[ch[p][1]],rs[ch[p][1]]);
l1[p]=0;
}
if(l2[p]!=inf){
l2[ch[p][0]]=l2[p];
l2[ch[p][1]]=l2[p];
s[ch[p][0]]=sz[ch[p][0]]*l2[p];
ls[ch[p][0]]=rs[ch[p][0]]=mx[ch[p][0]]=s[ch[p][0]];
s[ch[p][1]]=sz[ch[p][1]]*l2[p];
ls[ch[p][1]]=rs[ch[p][1]]=mx[ch[p][1]]=s[ch[p][1]];
val[ch[p][0]]=val[ch[p][1]]=l2[p];
if(ls[ch[p][0]]<0) ls[ch[p][0]]=0;
if(ls[ch[p][1]]<0) ls[ch[p][1]]=0;
if(rs[ch[p][0]]<0) rs[ch[p][0]]=0;
if(rs[ch[p][1]]<0) rs[ch[p][1]]=0;
l2[p]=inf;
}
}
inline int node(int k){
int id;
if(!top) id=++tot;
else id=st[top--];
num[id]=rand();
s[id]=val[id]=mx[id]=ls[id]=rs[id]=k;
ch[id][0]=ch[id][1]=0;
sz[id]=1;
l1[id]=0;
l2[id]=inf;
if(ls[id]<0) ls[id]=0;
if(rs[id]<0) rs[id]=0;
return id;
}
inline void split(int now,int k,int &x,int &y){
if(!now) x=y=0;
else{
pushdown(now);
int tmp=sz[ch[now][0]]+1;
if(tmp<=k){
x=now;
split(ch[x][1],k-tmp,ch[x][1],y);
}else{
y=now;
split(ch[y][0],k,x,ch[y][0]);
}
pushup(now);
}
}
inline int merge(int x,int y){
if(!x||!y) return x|y;
if(num[x]<num[y]){
pushdown(x);
ch[x][1]=merge(ch[x][1],y);
pushup(x);
return x;
}else{
pushdown(y);
ch[y][0]=merge(x,ch[y][0]);
pushup(y);
return y;
}
}
inline int build(int l,int r){
if(l>r) return 0;
int mid=l+r>>1;
int p=node(w[mid]);
ch[p][0]=build(l,mid-1);
ch[p][1]=build(mid+1,r);
pushup(p);
return p;
}
inline void print(int p){
if(!p) return;
print(ch[p][0]);
st[++top]=p;
print(ch[p][1]);
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;++i) w[i]=read();
rt=build(1,n);
while(m--){
cin>>str;
if(str=="INSERT"){
x=read(),y=read();
for(int i=1;i<=y;++i) w[i]=read();
split(rt,x,a,b);
rt=merge(a,merge(build(1,y),b));
}else if(str=="DELETE"){
x=read(),y=read();
split(rt,x-1,a,b);
split(b,y,b,c);
print(y);
rt=merge(a,c);
}else if(str=="REVERSE"){
x=read(),y=read();
split(rt,x-1,a,b);
split(b,y,b,c);
l1[b]^=1;
swap(ch[b][0],ch[b][1]);
swap(ls[b],rs[b]);
rt=merge(merge(a,b),c);
}else if(str=="MAKE-SAME"){
x=read(),y=read(),t=read();
split(rt,x-1,a,b);
split(b,y,b,c);
val[b]=l2[b]=t;
s[b]=sz[b]*t;
ls[b]=rs[b]=mx[b]=s[b];
rt=merge(merge(a,b),c);
}else if(str=="GET-SUM"){
x=read(),y=read();
split(rt,x-1,a,b);
split(b,y,b,c);
printf("%d\n",s[b]);
rt=merge(merge(a,b),c);
}else if(str=="MAX-SUM"){
printf("%d\n",mx[rt]);
}else{
x=read();
split(rt,x-1,a,b);
int ans=b;
while(ch[ans][0]) ans=ch[ans][0];
printf("%d\n",val[ans]);
rt=merge(a,b);
}
}
return 0;
}