#include <bits/stdc++.h>
using namespace std;
int pos[1000005], n;
set<int> park;
struct comp {
  bool operator()(const pair<int, pair<int, int> > &a,
                  const pair<int, pair<int, int> > &b) const {
    int gapa, gapb;
    if (a.second.first == 1 || a.second.second == n)
      gapa = a.first - 1;
    else
      gapa = (a.first - 1) / 2;
    if (b.second.first == 1 || b.second.second == n)
      gapb = b.first - 1;
    else
      gapb = (b.first - 1) / 2;
    if (gapa == gapb) return a.second < b.second;
    return gapa > gapb;
  }
};
set<pair<int, pair<int, int> >, comp> s;
void enter(int id) {
  int ans;
  pair<int, pair<int, int> > tmp = *s.begin();
  s.erase(s.begin());
  if (tmp.first == 1)
    ans = tmp.second.first;
  else if (tmp.second.first == 1) {
    ans = 1;
    s.insert({tmp.first - 1, {2, tmp.second.second}});
  } else if (tmp.second.second == n) {
    ans = n;
    s.insert({tmp.first - 1, {tmp.second.first, n - 1}});
  } else {
    ans = tmp.second.first + (tmp.first - 1) / 2;
    if ((tmp.first - 1) / 2)
      s.insert({(tmp.first - 1) / 2, {tmp.second.first, ans - 1}});
    s.insert({tmp.first / 2, {ans + 1, tmp.second.second}});
  }
  pos[id] = ans;
  park.insert(ans);
  cout << ans << '\n';
}
void depart(int id) {
  park.erase(pos[id]);
  int lb, ub;
  auto it = park.upper_bound(pos[id]);
  ub = *it;
  it--;
  lb = *it;
  s.erase({pos[id] - lb - 1, {lb + 1, pos[id] - 1}});
  s.erase({ub - pos[id] - 1, {pos[id] + 1, ub - 1}});
  s.insert({ub - lb - 1, {lb + 1, ub - 1}});
}
int main() {
  int m, t, id;
  cin >> n >> m;
  park.insert(0);
  park.insert(n + 1);
  s.insert({n, {1, n}});
  while (m--) {
    cin >> t >> id;
    if (t == 1)
      enter(id);
    else
      depart(id);
  }
  return 0;
}
