using namespace std ;
const int N = 1e5 + 10 ;
const int Inf = 1e9 ;
int read(){
int res = 0 , flag = 1 ;
char c = getchar() ;
while(!isdigit(c)){
if(c == '-') flag = -1 ;
c = getchar() ;
}
while(isdigit(c)){
res = (res << 1) + (res << 3) + (c ^ 48) ;
c = getchar() ;
}
return res * flag ;
}
int tot ;
int ans ;
int root , idx ;
void write(int x){
if(x < 10) putchar('0' + x) ;
else {
write(x / 10) ;
putchar('0' + x % 10) ;
}
}
void ptc(char c){
putchar(c) ;
}
int n , m , delta ;
struct Node{
int s[2] , p ;
int v , sz ;
void init(int _v , int _p){
v = _v ;
p = _p ;
sz = 1 ;
}
} tr[N] ;
void pushup(int u){
tr[u].sz = tr[tr[u].s[0]].sz + tr[tr[u].s[1]].sz + 1 ;
}
void rotate(int x){
int y = tr[x].p , z = tr[y].p ;
int k = tr[y].s[1] == x ;
tr[z].s[tr[z].s[1] == y] = x , tr[x].p = z ;
tr[y].s[k] = tr[x].s[k ^ 1] , tr[tr[x].s[k ^ 1]].p = y ;
tr[x].s[k ^ 1] = y , tr[y].p = x ;
pushup(y) , pushup(x) ;
}
void splay(int x , int k){
while(tr[x].p != k){
int y = tr[x].p , z = tr[y].p ;
if(z != k){
if((tr[y].s[1] == x) ^ (tr[z].s[1] == y)) rotate(x) ;
else rotate(y) ;
}
rotate(x) ;
}
if(!k) root = x ;
}
int insert(int v){
int u = root , p = 0 ;
while(u) p = u , u = tr[u].s[v > tr[u].v] ;
u = ++ idx ;
tr[u].init(v , p) ;
if(p) tr[p].s[v > tr[p].v] = u ;
splay(u , 0) ;
return u ;
}
int get(int v){
int u = root , res = 0 ;
while(u){
if(tr[u].v >= v) res = u , u = tr[u].s[0] ;
else u = tr[u].s[1] ;
}
return res ;
}
int get_k(int k){
int u = root ;
while(u){
if(k <= tr[tr[u].s[0]].sz) u = tr[u].s[0] ;
else if(k == tr[tr[u].s[0]].sz + 1) return u ;
else {
k -= (tr[tr[u].s[0]].sz + 1) ;
u = tr[u].s[1] ;
}
}
}
void solve(){
n = read() , m = read() ;
int L = insert(-Inf) , R = insert(Inf) ;
char op[2] ;
int k ;
while(n --){
scanf("%s" , op) ;
k = read() ;
if(*op == 'I'){
// ++ tot ;
if(k >= m){
k -= delta ;
insert(k) ;
++ tot ;
}
}
else if(*op == 'A'){
delta += k ;
}
else if(*op == 'S'){
delta -= k ;
R = get(m - delta) ;
splay(R , 0) , splay(L , R) ;
tr[L].s[1] = 0 ;
pushup(L) , pushup(R) ;
}
else {
if(tr[root].sz - 2 >= k){
int u = get_k(tr[root].sz - k) ;
write(tr[u].v + delta) ;
puts("") ;
}
else puts("-1") ;
}
}
write(tot - tr[root].sz + 2) ;
}
int main(void){
solve() ;
}