#include <bits/stdc++.h>
#define int long long
using namespace std;
#define f first
#define s second

int cnt[100005];

signed main() {
    int n, q;
	cin >> n >> q;
	multiset <int> p;
	multiset <pair<int, int>> d;
	d.insert({n, -1});
	int t = 0;
	for (int i = 1; i <= q; i++) {
		char a;
		cin >> a;
		if (a == '+') {
			t++;
			// if (t == 4) {
			// 	for (auto r: p) {
			// 		cout << r << ' ';
			// 	}
			// 	cout << endl;
			// 	for (auto r: d) {
			// 		cout << r.f << ' ';
			// 	}
			// 	exit(0);
			// }
			int v = -prev(d.end())->second;
			d.erase(prev(d.end()));
			cout << v << endl;
			cnt[t] = v;
			p.insert(v);
			auto l = p.find(v);
			auto r = l;
			r++;
			if (r == p.end()) {
				if (n - v > 0) {
					d.insert({n - v, -n});
				}
			}
			else {
				if ((*r + *l) / 2 > 0) {
					d.insert({(*r - *l) / 2, -(*r + *l) / 2});
				}
			}
			r = l;
			l = r;
			l--;
			if (r == p.begin()) {
				if (v - 1 > 1) {
					d.insert({v - 1, -1});
				}
			}
			else {
				if ((*r - *l) / 2 > 0) {
					d.insert({(*r - *l) / 2, -(*r + *l) / 2});
				}
			}
		}
		else {
			int a;
			cin >> a;
			int v = cnt[a];
			auto l = p.find(v);
			auto r = l;
			r++;
			if (r == p.end()) {
				if (n - v > 0) {
					d.erase({n - v, -n});
				}
			}
			else {
				if ((*r - *l) / 2 > 0) {
					d.erase({(*r - *l) / 2, -(*r + *l) / 2});
				}
			}
			r = l;
			l = r;
			l--;
			if (!p.empty()) {
				if (l == p.begin()) {
					if (v - 1 > 0) {
						d.erase({v, -1});
					}
				}
				else {
					if ((*r - *l) / 2 > 0) {
						d.erase({(*r - *l) / 2, -(*r + *l) / 2});
					}
				}
			}
			auto k = p.find(v);
			r = k;
			r++;
			l = k;
			l--;
			if (l == prev(p.begin()) && r == p.end()) {
				d.insert({n, -1});
			}
			else if (l == prev(p.begin())) {
				if (*r - 1 > 0) {
					d.insert({*r - 1, -1});
				}
			}
			else if (r == p.end()) {
				if (n - *l > 0) {
					d.insert({n - *l, -n});
				}
			}
			else {
				d.insert({(*r - *l) / 2, -(*l + *r) / 2});
			}
			p.erase(v);
		}
	}
}
