#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

#define endl '\n'
#define int ll
#define ve vector
#define pb push_back
#define all(x) x.begin() , x.end()
#define pii pair <int , int>
#define F first
#define S second
#define bpp __builtin_popcount
#define orok order_of_key
#define fob find_by_order
#define ins insert


using namespace std;
using namespace __gnu_pbds;


typedef long long ll;
typedef long double ld;

typedef tree < int, null_type, less < int >, rb_tree_tag, tree_order_statistics_node_update > oset;

oset p;
set < pair < int, pii > > st;


int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    #ifdef LOCAL
        freopen("input.txt" , "r" , stdin);
        freopen("output.txt" , "w" , stdout);
    #endif // LOCAL




    int n;
    cin >> n;


    int q;
    cin >> q;

    vector < int > add;


    while(q--){
        char c;
        cin >> c;

//
//cout << "TEST" << endl;
//        for(auto to : p)
//            cout << to << ' ';
//        cout << endl;
//
//for(auto to : st)
//    cout << to.F << ' ' << to.S.F << ' ' << to.S.S << endl;
//cout << endl;
        if(c == '+'){
            if(p.empty()){
                add.pb(1);
                p.ins(1);

            }
            else if(p.size() == 1){

                int dst1 = *p.begin() - 1;
                if(*p.begin() == 1) dst1 = -(int)(1e9);
                int dst2 = n - *p.rbegin();
                if(*p.rbegin() == n) dst2 = -(int)(1e9);

                dst1 -= (1 - dst1 % 2);
                dst2 -= (1 - dst2 % 2);

                if(dst1 < dst2) {

//                cout << "ADD " << endl;
dst2--;
                    //dst2 -= (1 - dst2 % 2);
                    add.pb(n);
                    if(n - 1 != *p.rbegin())
                    st.ins({-dst2, {*p.rbegin(), n}});
                    p.ins(n);

                }
                else {

                    dst1--;
                    //dst1 -= (1 - dst1 % 2);
                    add.pb(1);
                    if(2 != *p.begin())
                    st.ins({-dst1, {1, *p.begin()}});
                    p.ins(1);

                }
            }
            else {
                pair < int, pii > b = {(int)(1e9), {1, 1}};

                if(st.size()) b = *st.begin();
                int dst1 = *p.begin() - 1;
                if(*p.begin() == 1) dst1 = -(int)(1e9);
                int dst2 = n - *p.rbegin();
                if(*p.rbegin() == n) dst2 = -(int)(1e9);

//                dst1 -= (1 - dst1 % 2);
//                dst2 -= (1 - dst2 % 2);
//                cout << "ADD " << 17 - q << ' ' << dst1 << ' ' << dst2 << ' ' << -b.F << endl;
//                for(auto to : st)
//                    cout << to.F << ' ' << to.S.F << ' ' << to.S.S << endl;

                 if(dst1 >= -b.F / 2 && dst1 >= dst2){
//                        cout << "!!!!!!! " << endl;
dst1--;
                    dst1 -= (1 - dst1 % 2);
                    add.pb(1);
                    if(*p.begin() != 2)
                    st.ins({-dst1, {1, *p.begin()}});
                    p.ins(1);
                }
                else if(-b.F / 2 >= dst1 && -b.F / 2 >= dst2){
                    int l = b.S.F;
                    int r = b.S.S;


                    st.erase(b);
                    int nw = (l + r) / 2;
                    p.ins(nw);
                    add.pb(nw);


                    int d1 = (nw - l - 1);
                    d1 -= (1 - d1 % 2);

                    int d2 = (r - nw - 1);
                    d2 -= (1 - d2 % 2);

                    if(l + 1 != nw)
                    st.ins({-d1, {l, nw}});
                    if(r - 1 != nw)
                    st.ins({-d2, {nw, r}});
                }
                else{
                        dst2--;
                    dst2 -= (1 - dst2 % 2);
                    add.pb(n);
                    if(*p.rbegin() + 1 != n)
                    st.ins({-dst2, {*p.rbegin(), n}});
                    p.ins(n);
                }

            }
        }
        else {
            int i;
            cin >> i;

            i--;

            int x = add[i];

            int lss = p.orok(x);

            int l = -1, r = -1;
            if(lss > 0){
                int el = *p.fob(lss - 1);
                int dst = x - el - 1;
                dst -= (1 - dst % 2);
                l = el;
                if(st.count({-dst, {el, x}})) st.erase({-dst, {el, x}});
            }
            lss ++;
            if(lss < p.size()){
                int el = *p.fob(lss);
                int dst = el - x - 1;
                dst -= (1 - dst % 2);
                r = el;
                if(st.count({-dst, {x, el}})) st.erase({-dst, {x, el}});
            }
//cout << "DEL " << l << ' ' << r << ' ' << x << ' ' << lss << endl;
            if(min(l, r) > -1){
                int dst = r - l - 1;
                dst -= (1 - dst % 2);
                st.ins({-dst, {l, r}});
            }
            p.erase(x);
        }


    }

    for(auto to : add)
        cout << to << endl;



return 0;


}
