#include<bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin("secv8.in");
ofstream fout("secv8.out");
const int N = 25e4;
const int mod = 998244353;
int r = 0;
struct treapnode{
int y,sz;
int val;
bool lz;
treapnode* l;
treapnode* r;
};
int rng(int x){
r = (1ll*r*729 + 70)%mod;
return r%x;
}
void upd(treapnode* &p){
p->sz = (p->l?p->l->sz:0) + (p->r?p->r->sz:0) + 1;
}
int get(treapnode* &p){
return (p?p->sz:0);
}
void push(treapnode* &p){
if(!p)return;
if(p->lz){
p->lz^=1;
swap(p->l,p->r);
if(p->l)p->l->lz^=1;
if(p->r)p->r->lz^=1;
}
}
void merger(treapnode* a, treapnode* b, treapnode* &t){
push(a);
push(b);
if(!a || !b){
t = (a?a:b);
}else if(a->y < b->y){
merger(a, b->l, b->l);
t = b;
}else{
merger(a->r, b, a->r);
t = a;
}
upd(t);
}
void spliter(treapnode* &l, treapnode* &r, treapnode* t, int key, int sum = 0){
push(t);
if(!t){
l = r = NULL;
}else{
if(sum + get(t->l) < key){
spliter(t->r, r, t->r, key, sum + get(t->l) + 1);
l = t;
}else{
spliter(l, t->l, t->l, key, sum);
r = t;
}
upd(t);
}
}
void dbg(treapnode* &t){
if(!t)return;
push(t);
dbg(t->l);
cout<<t->val<<' ';
dbg(t->r);
}
int finder(treapnode* &t, int nr){
push(t);
if(!t)return -1;
if(get(t->l) == nr){
return t->val;
}else if(get(t->l) > nr){
return finder(t->l, nr);
}else{
return finder(t->r, nr - get(t->l) - 1);
}
}
treapnode v[N];
treapnode *p1,*p2,*p3;
int main(){
int n,t;
int cnt = 0;
cin>>n>>t;
for(int i = 0;i < n;i++){
char x;
cin>>x;
if(x == 'I'){
int a,b;
cin>>a>>b;
a--;
v[cnt++] = {rng(mod),1,b,0,nullptr,nullptr};
spliter(p1, p2, p1, a);
merger(p1,&v[cnt - 1], p1);
merger(p1, p2, p1);
}else if(x == 'D'){
int l,r;
cin>>l>>r;
l--;r--;
spliter(p1, p2, p1, l);
spliter(p2, p3, p2, r - l + 1);
merger(p1, p3, p1);
}else if(x == 'A'){
int p;
cin>>p;
p--;
cout<<finder(p1, p)<<'\n';
}else if(x == 'R'){
int l,r;
cin>>l>>r;
l--;r--;
spliter(p1, p2, p1, l);
spliter(p2, p3, p2, r - l + 1);
p2->lz^=1;
merger(p1, p2, p1);
merger(p1, p3, p1);
}
}
dbg(p1);
return 0;
}