qwq
# include <bits/stdc++.h>
using namespace std ;
const int N = 2e5 + 7 ;
struct Node {
int son[2] , max ;
}t[N << 2] ;
int tot ;
int n , m ;
char opt ;
int lst , x ;
int cnt ;
int L , R , T ;
inline void push_up ( int u ) {
t[u] . max = max ( t[t[u] . son[0]] . max , t[t[u] . son[1]] . max) ;
}
inline bool inrange ( int l , int r ) {
return L <= l && r <= R ;
}
inline int query ( int u , int l , int r ) {
if ( inrange(l,r) ) return t[u] . max ;
int m = l + r >> 1 ;
int tmp = 0 ;
if ( L <= m && t[u] . son[0] ) tmp = max ( tmp , query ( t[u] . son[0] , l , m ) ) ;
if ( R > m && t[u] . son[1] ) tmp = max ( tmp , query ( t[u] . son[1] , m + 1 , r ) ) ;
return tmp ;
}
inline void update ( int u , int l , int r ) {
if ( l == r ) {
t[u] . max = T ;
return ;
}
int m = l + r >> 1 ;
int cur = L > m ;
if ( ! t[u] . son[cur] ) t[u] . son[cur] = ++tot ;
update ( t[u] . son[cur] , cur ? m + 1 : l , cur ? r : m ) ;
push_up(u) ;
}
int main () {
ios :: sync_with_stdio(false) ;
cin . tie(0) ;
cout . tie(0) ;
cin >> n >> m ;
while ( n-- ) {
cin >> opt >> x ;
if ( opt == 'Q' ) L = cnt - x + 1 , R = cnt , lst = query ( 1 , 1 , n ) , cout << lst << "\n" ;
if ( opt == 'A' ) L = ++cnt , T = ( x + lst ) % m , update( 1 , 1 , n ) ;
}
return 0 ;
}