#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include<deque>
#include<iomanip>

using namespace std;
typedef long long ll;

struct Seg {
    ll l, r;
    bool le, ri;
    Seg(ll l, ll r, bool le, bool ri) : l(l), r(r), le(le), ri(ri) {}
};

struct Seg2 {
    Seg seg;
    Seg2(Seg s): seg(s) {}
};

bool operator<(Seg s1, Seg s2) {
    ll l1 = s1.r - s1.l + 1;
    ll l2 = s2.r - s2.l + 1;
    if (l1 == l2) {
        if (s1.l == s2.l) {
            return s1.r > s2.r;
        }
        return s1.l > s2.l;
    }
    else if ((l1 + 1 == l2 && l1 % 2 == 1) || (l2 + 1 == l1 && l2 % 2 == 1)) {
        if (s1.l == s2.l) {
            return s1.r > s2.r;
        }
        return s1.l > s2.l;
    }
    return l1 < l2;
}

bool operator<(Seg2 s1, Seg2 s2) {
    if (s1.seg.l == s2.seg.l) {
        return s1.seg.r < s2.seg.r;
    }
    return s1.seg.l < s2.seg.l;
}

int main()
{
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    ll n, k; cin >> n >> k;
    set<Seg> segs;
    set<Seg2> segs2;
    segs.insert({ 0, n - 1, false, false });
    segs2.insert(Seg2({ 0, n - 1, false, false }));
    vector<ll> dudes;
    while (k--) {
        string st; cin >> st;
        if (st[0] == '+') {
            Seg seg = *(--segs.end());
            ll sz = seg.r - seg.l + 1;
            ll ans = 0;
            if (!seg.le) {
                ans = seg.l;
            }
            else if (!seg.ri) {
                ans = seg.r;
            }
            else {
                ans = (seg.l + seg.r) / 2;
            }
            segs2.erase(Seg2(*(--segs.end())));
            segs.erase(--segs.end());

            Seg s1 = { seg.l, ans - 1, seg.le, true };
            Seg s2 = { ans + 1, seg.r, true, seg.ri };
            if (s1.r - s1.l + 1 > 0) {
                segs.insert(s1);
                segs2.insert(Seg2(s1));
            }
            if (s2.r - s2.l + 1 > 0) {
                segs.insert(s2);
                segs2.insert(Seg2(s2));
            }
            dudes.push_back(ans);
            //cout << "ANS: " << ans + 1 << endl;
            cout << ans + 1 << endl;
        }
        else {
            string st2 = "";
            for (int i = 1; i < st.size(); i++) st2 += st[i];
            ll val = stol(st2);
            ll pos = dudes[val - 1];
            auto it1 = segs2.lower_bound(Seg2({ pos, pos, true, true }));
            auto it2 = segs2.end();
            if (it1 != segs2.begin()) it2 = --(segs2.lower_bound(Seg2({ pos, pos, true, true })));
            Seg seg(pos, pos, pos != (0), pos != (n - 1));
            if (it1 != segs2.end()) {
                Seg si = (*it1).seg;
                if (si.l == pos + 1) {
                    segs2.erase(it1);
                    segs.erase(si);
                    seg.r = si.r;
                    seg.ri = si.ri;
                }
            }
            if (it2 != segs2.end()) {
                Seg si = (*it2).seg;
                if (si.r == pos - 1) {
                    segs2.erase(it2);
                    segs.erase(si);
                    seg.l = si.l;
                    seg.le = si.le;
                }
            }
            segs.insert(seg);
            segs2.insert(Seg2(seg));
        }
    }
}