#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=5000005;
const int INF=0x7fffffff/2;
int m;
int _mousePos=2;
int ins[N];
int NumIN;
class Splay
{
public:
int prt[N],s[N][2],siz[N];
int v[N],maxl[N],maxr[N],sum[N],MAX[N];
int lz[N],c_lz[N];
int bstsiz;
int root;
void pushup(int x)
{
#define l(x) s[x][0]
#define r(x) s[x][1]
if(!x) return;
siz[x]=1,sum[x]=v[x];
if(l(x)) siz[x]+=siz[l(x)],sum[x]+=sum[l(x)];
if(r(x)) siz[x]+=siz[r(x)],sum[x]+=sum[r(x)];
maxl[x]=max(maxl[l(x)],sum[l(x)]+v[x]+maxl[r(x)]);
maxr[x]=max(maxr[r(x)],sum[r(x)]+v[x]+maxr[l(x)]);
MAX[x]=max(max(MAX[l(x)],MAX[r(x)]),maxr[l(x)]+v[x]+maxl[r(x)]);
}
void pushdown(int x)
{
#define l(x) s[x][0]
#define r(x) s[x][1]
if(!x) return;
if(c_lz[x])
{
c_lz[l(x)]=c_lz[r(x)]=c_lz[x];
sum[l(x)]=c_lz[x]*siz[l(x)];
sum[r(x)]=c_lz[x]*siz[r(x)];
v[l(x)]=v[r(x)]=c_lz[x];
c_lz[x]=0;
}
if(lz[x])
{
lz[l(x)]^=1;
lz[r(x)]^=1;
swap(maxl[l(x)],maxr[l(x)]); swap(maxl[r(x)],maxr[r(x)]);
swap(l(x),r(x));
lz[x]=0;
}
}
int build(int l,int r,int f)
{
if(l>r) return 0;
int mid=l+r>>1;
int id=++bstsiz;
prt[id]=f;
++siz[id];
sum[id]=v[id]=ins[mid];
MAX[id]=maxl[id]=maxr[id]=v[id];
s[id][0]=build(l,mid-1,id);
s[id][1]=build(mid+1,r,id);
pushup(id);
return id;
}
bool ifr(int x){return x==s[prt[x]][1];}
void rot(int x)
{
int fx=prt[x],ffx=prt[fx];
pushdown(x),pushdown(fx);
bool w=ifr(x);
s[fx][w]=s[x][w^1];
prt[s[fx][w]]=fx;
prt[fx]=x; prt[x]=ffx;
s[x][w^1]=fx;
if(ffx)
{
s[ffx][fx==s[ffx][1]]=x;
}
pushup(fx);
}
void splay(int x,int to)
{
for(int fx;(fx=prt[x])!=to;rot(x))
{
if(prt[fx]!=to)
rot(ifr(x)==ifr(fx)?fx:x);
}
if(!to) root=x;
}
int kth(int k)
{
int x=root;
while(true)
{
pushdown(x);
if(k<=siz[s[x][0]]) x=s[x][0];
else
{
k-=siz[s[x][0]]+1;
if(k==0) return x;
x=s[x][1];
}
}
}
void del(int lenth)
{
splay(kth(_mousePos-1),0);
splay(kth(siz[s[root][0]]+lenth+2),root);
s[s[root][1]][0]=0;
pushup(s[root][1]); pushup(root);
}
void reverse(int lenth)
{
splay(kth(_mousePos-1),0);
splay(kth(siz[s[root][0]]+lenth+2),root);
lz[s[s[root][1]][0]]^=1;
}
void change(int lenth,int k)
{
splay(kth(_mousePos-1),0);
splay(kth(siz[s[root][0]]+lenth+2),root);
c_lz[s[s[root][1]][0]]=k;
}
void getMAXc()
{
_mousePos=2;
splay(kth(_mousePos-1),0);
splay(kth(siz[s[root][0]]+NumIN+2),root);
printf("%d\n",MAX[root]);
}
void getsum(int lenth)
{
splay(kth(_mousePos-1),0);
splay(kth(siz[s[root][0]]+lenth+2),root);
printf("%d\n",sum[s[s[root][1]][0]]);
}
void insert(int lenth)
{
splay(kth(_mousePos-1),0);
splay(kth(_mousePos),root);
s[s[root][1]][0]=build(1,lenth,s[root][1]);
prt[s[s[root][1]][0]]=s[root][1];
splay(s[s[root][1]][0],0);
pushup(s[root][1]); pushup(root);
}
void getchar()
{
int kt=kth(_mousePos);
splay(kt,0);
putchar(char(v[kt]));
if(char(v[kt])!='\n') putchar('\n');
}
void dfs(int r)
{
if(s[r][0]) dfs(s[r][0]);
cout<<v[r]<<" ";
if(s[r][1]) dfs(s[r][1]);
}
void dfs2(int r)
{
if(s[r][0]) dfs(s[r][0]);
cout<<sum[r]<<" ";
if(s[r][1]) dfs(s[r][1]);
}
}t;
int main()
{
#define getpos() scanf("%d",&_mousePos),_mousePos+=1
int n,m;
scanf("%d %d",&n,&m);
NumIN=n;
for(int i=2;i<=n+1;i++) scanf("%d",ins+i);
t.root=t.build(1,n+2,0);
char op[15];
int k,lenth;
while(m--)
{
scanf("%s",op);
if(op[0]=='I')
{
getpos();
_mousePos++; scanf("%d",&lenth);
NumIN+=lenth;
for(int i=1;i<=lenth;i++) scanf("%d",ins+i);
t.insert(lenth);
}
else if(op[0]=='D') getpos(),scanf("%d",&lenth),NumIN-=lenth,t.del(lenth);
else if(op[0]=='R') getpos(),scanf("%d",&lenth),t.reverse(lenth);
else if(op[0]=='G') getpos(),scanf("%d",&lenth),t.getsum(lenth);
else if(op[2]=='K') getpos(),scanf("%d %d",&lenth,&k),t.change(lenth,k);
else t.getMAXc();
}
}