#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma pack(1)

using namespace std;
using namespace __gnu_pbds;

#define TASK "test"

template<class Node_CItr,class Node_Itr,class Cmp_Fn,class _Alloc>
struct my_update_policy
{
    virtual Node_CItr node_begin() const=0;
    virtual Node_CItr node_end() const=0;
    typedef int metadata_type;

    int get(int x)
    {
        auto it=node_begin();
        while(it!=node_end())
        {
            auto l=it.get_l_child();
            auto r=it.get_r_child();
            int T=x+1;
            if(l!=node_end()) T+=l.get_metadata();
            if(T<=**it)
            {
                it=l;
            }
            else
            {
                x=T;
                it=r;
            }
        }
        return x;
    }

    void operator()(Node_Itr it, Node_CItr end_it)
    {
        auto l=it.get_l_child();
        auto r=it.get_r_child();
        int left=0,right=0;
        if(l!=end_it) left=l.get_metadata();
        if(r!=end_it) right=r.get_metadata();
        const_cast<int&>(it.get_metadata())=left+right+1;
    }
};

tree<int,null_type,less<int>,rb_tree_tag,my_update_policy> me;

int main()
 {
    #ifndef ONLINE_JUDGE
    freopen(TASK".in","r",stdin);
    freopen(TASK".out","w",stdout);
    #endif
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n,m;
    cin>>n>>m;

    for(int i=0;i<m;i++)
    {
        char a;
        int b;
        cin>>a>>b;
        if(a=='L')
            cout<<me.get(b)<<"\n";
        else
            me.insert(me.get(b));
    }
 }
