#include <bits/stdc++.h>
using namespace std;
#ifndef HOME
ifstream fin("secv8.in");
ofstream fout("secv8.out");
#else
ifstream fin("ciorna.in");
ofstream fout("ciorna.out");
#endif
unsigned seed = chrono :: system_clock :: now().time_since_epoch().count();
mt19937 rng(seed);
struct treap {
int val, pr, sz;
treap *l, *r;
bool mirror;
treap(int val) : val(val), pr(rng()), sz(1), l(NULL), r(NULL), mirror(false) {}
friend int size(treap* t) { return t ? t -> sz : 0; }
friend void apply(treap* t) { if(!t) return; t -> mirror ^= true; swap(t -> l, t -> r); }
friend void prop(treap* t) { if(!t || !t -> mirror) return; t -> mirror = false; apply(t -> l); apply(t -> r); }
friend void update(treap* t) { if(!t) return; t -> sz = 1 + size(t -> l) + size(t -> r); }
};
treap* root = new treap(-1);
array <treap*, 2> split(treap* t, int k) {
if(!t) return {NULL, NULL};
prop(t);
if(size(t -> l) >= k) {
auto [l, r] = split(t -> l, k);
t -> l = r;
update(t);
return {l, t};
} else {
auto [l, r] = split(t -> r, k - size(t -> l) - 1);
t -> r = l;
update(t);
return {t, r};
}
}
treap* merge(treap* l, treap* r) {
if(!l) return r;
if(!r) return l;
prop(l); prop(r);
if(l -> pr >= r -> pr) {
l -> r = merge(l -> r, r);
update(l);
return l;
} else {
r -> l = merge(l, r -> l);
update(r);
return r;
}
}
void insert(int k, int e) {
treap* n = new treap(e);
auto [l, r] = split(root, k - 1);
root = merge(l, merge(n, r));
}
void deletet(treap* t) {
if(!t) return;
deletet(t -> l);
deletet(t -> r);
delete(t);
}
void erase(int x, int y) {
auto [l, r1] = split(root, x - 1);
auto [l1, r] = split(r1, y - x + 1);
deletet(l1);
root = merge(l, r);
}
int acc(treap* t, int k) {
prop(t);
if(size(t -> l) >= k) return acc(t -> l, k);
if(size(t -> l) + 1 == k) return t -> val;
return acc(t -> r, k - size(t -> l) - 1);
}
int access(int k) { return acc(root, k); }
void reverse(int x, int y) {
auto [l, r1] = split(root, x - 1);
auto [l1, r] = split(root, y - x + 1);
apply(l1);
root = merge(l, merge(l1, r));
}
void print(treap* t) {
if(!t) return;
prop(t);
print(t -> l);
if(t -> val >= 0)
fout << t -> val << " ";
print(t -> r);
}
int main()
{
int n, c;
fin >> n >> c;
for(int i = 1; i <= n; i++) {
char t; int k, e, l, r;
fin >> t;
if(t == 'I') { fin >> k >> e; insert(k, e); }
if(t == 'A') { fin >> k; fout << access(k) << "\n"; }
if(t == 'R') { fin >> l >> r; reverse(l, r); }
if(t == 'D') { fin >> l >> r; erase(l, r); }
//fout << t << " ";
//print(root);
//fout << "\n";
}
print(root);
return 0;
}