//Pranet Verma
#include <bits/stdc++.h>
using namespace std;
namespace Splay
{
    typedef struct Node* pnode;
    pnode null;
    struct Node
    {
        int val,mx,sz;
        pnode c[2],p;
    };
    // void display(pnode u)
    // {
    //     if(u==null)
    //         return;
    //     display(u->c[0]);
    //     cout<<u->val<<" "<<endl;
    //     display(u->c[1]);        
    // }
    bool getDir(pnode p,pnode x)
    {
        return p->c[1]==x;
    }
    void setLink(pnode x,pnode y,int d)
    {
        if(x!=null)
            x->c[d]=y;
        if(y!=null)
            y->p=x;
    }
    void update(pnode u)
    {
        if(u==null)
            return;
        u->sz=1+u->c[0]->sz+u->c[1]->sz;
        u->mx=max(u->val,max(u->c[0]->mx,u->c[1]->mx));
    }
    void rotate(pnode y,bool d)
    {
        pnode x=y->c[d],z=y->p;
        setLink(y,x->c[d^1],d);
        setLink(x,y,d^1);
        setLink(z,x,getDir(z,y));
        update(x);update(y);
    }
    void splay(pnode x)
    {
        while(x->p!=null)
        {
            pnode y=x->p,z=y->p;
            int dy=getDir(y,x),dz=getDir(z,y);
            if(z==null)
                rotate(y,dy);
            else if(dy==dz)
                rotate(z,dz),rotate(y,dy);
            else
                rotate(y,dy),rotate(z,dz);
        }
    }
    pnode get(pnode u,int key,int add)
    {
        while(1)
        {
            int rank=1+add+u->c[0]->sz;
            if(rank==key)
            {
                splay(u);
                return u;
            }
            else if(rank<key)
            {
                add=rank;
                u=u->c[1];
            }
            else
                u=u->c[0];
        }
    }
    void split(pnode u,pnode &l,pnode &r,int key,int add)
    {
        if(key==add)
        {
            l=null;
            r=u;
        }
        else
        {
            l=get(u,key,add);
            r=l->c[1];
            l->c[1]=r->p=null;
            update(l);
        }
    }
    void merge(pnode &u,pnode x,pnode y)
    {
        if(x==null)
            u=y;
        else if(y==null)
            u=x;
        else
        {
            u=get(x,x->sz,0);
            setLink(u,y,1);
            update(u);
        }
    }
    const int MAXN=100005;
    Node buff[MAXN],*ptr=buff;
    pnode newNode()
    {
        return ++ptr;
    }
}   
using namespace Splay;
int main()
{
    null= newNode();
    null->val=null->mx=-1e9-9;
    null->sz=0;
    null->c[0]=null->c[1]=null->p=null;
    int m;
    scanf("%d\n",&m);
    pnode root=null;
    while(m--)
    {
        char ty;
        int x,y;
        scanf("%c %d %d\n",&ty,&x,&y);
        if(ty=='A')
        {
            pnode a,b;
            split(root,a,b,y-1,0);
            root=newNode();
            root->val=root->mx=x;
            root->sz=1;
            root->c[0]=a;
            root->c[1]=b;
            root->p=null;
            // update(root);
            a->p=b->p=root;
        }
        else if(ty=='Q')
        {
            pnode a,b,c;
            split(root,a,b,x-1,0);
            split(b,b,c,y,a->sz);
            printf("%d\n",b->mx);
            merge(b,b,c);
            merge(root,a,b);
        }   
        else
            assert(0);
    }
}