#include <bits/stdc++.h>
using namespace std;
int n, m, pos[2000001];
struct comp {
  bool operator()(const pair<int, int> &a, const pair<int, int> &b) const {
    int d1, d2;
    if (a.first == 1 || a.second == n)
      d1 = a.second - a.first;
    else
      d1 = (a.second - a.first) / 2;
    if (b.first == 1 || b.second == n)
      d2 = b.second - b.first;
    else
      d2 = (b.second - b.first) / 2;
    if (d1 != d2)
      return d1 > d2;
    else
      return a.first < b.first;
  }
};
set<pair<int, int>, comp> st1;
set<pair<int, int> > st2;
int add() {
  pair<int, int> temp = *st1.begin();
  st1.erase(temp);
  st2.erase(temp);
  int ans;
  if (temp.first == 1)
    ans = 1;
  else if (temp.second == n)
    ans = n;
  else
    ans = (temp.first + temp.second) / 2;
  if (temp.first != ans) {
    st1.insert({temp.first, ans - 1});
    st2.insert({temp.first, ans - 1});
  }
  if (temp.second != ans) {
    st1.insert({ans + 1, temp.second});
    st2.insert({ans + 1, temp.second});
  }
  return ans;
}
void rem(int pos) {
  set<pair<int, int> >::iterator lef, rig, t2;
  lef = st2.lower_bound({pos, pos});
  t2 = lef;
  if (lef != st2.begin()) lef--;
  rig = st2.upper_bound({pos, pos});
  vector<pair<int, int> > erase2;
  int ll, rr;
  if (t2 == st2.begin() || (*lef).second != pos - 1) {
    ll = pos;
  } else {
    st1.erase(*lef);
    erase2.push_back(*lef);
    ll = (*lef).first;
  }
  if (rig == st2.end() || (*rig).first != pos + 1) {
    rr = pos;
  } else {
    st1.erase(*rig);
    erase2.push_back(*rig);
    rr = (*rig).second;
  }
  st1.insert({ll, rr});
  st2.insert({ll, rr});
  for (int i = 0; i < erase2.size(); ++i) {
    st2.erase(erase2[i]);
  }
}
int main() {
  scanf("%d %d", &n, &m);
  st1.insert({1, n});
  st2.insert({1, n});
  while (m--) {
    int x, t;
    scanf("%d %d", &t, &x);
    if (t == 1) {
      pos[x] = add();
      printf("%d\n", pos[x]);
    } else
      rem(pos[x]);
  }
}
