#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 9;
int n, m, car[(int)1e6 + 9], pre[N], suc[N];
struct Seg {
  int l, r;
  inline Seg() {}
  inline Seg(int l, int r) : l(l), r(r) {}
  bool operator<(const Seg &A) const {
    int l1 = r - l + 1, l2 = A.r - A.l + 1;
    if (l == 1 || r == n) l1 = 2 * l1 - 1;
    if (A.l == 1 || A.r == n) l2 = 2 * l2 - 1;
    if (l1 > l2 + 1) return true;
    if (l1 + 1 < l2) return false;
    if (l1 == l2) return l < A.l;
    if (min(l1, l2) % 2 == 1) return l < A.l;
    return l1 > l2;
  }
};
set<Seg> S;
int main() {
  scanf("%d%d", &n, &m);
  S.insert(Seg(1, n));
  suc[0] = pre[n + 1] = n;
  for (int i = 1; i <= (m); i++) {
    int ti, id;
    scanf("%d%d", &ti, &id);
    if (ti == 1) {
      Seg it = *S.begin();
      if (it.l == 1)
        car[id] = 1;
      else {
        if (it.r == n)
          car[id] = n;
        else
          car[id] = (it.l + it.r) / 2;
      }
      int lot = car[id];
      Seg seg1 = Seg(it.l, lot - 1);
      Seg seg2 = Seg(lot + 1, it.r);
      pre[lot] = suc[it.l - 1] = seg1.r - seg1.l + 1;
      suc[lot] = pre[it.r + 1] = seg2.r - seg2.l + 1;
      S.erase(S.begin());
      S.insert(seg1);
      S.insert(seg2);
      printf("%d\n", lot);
    } else {
      int lot = car[id];
      Seg seg1 = Seg(lot - pre[lot], lot - 1);
      Seg seg2 = Seg(lot + 1, lot + suc[lot]);
      S.erase(S.find(seg1));
      S.erase(S.find(seg2));
      suc[seg1.l - 1] = pre[lot] + suc[lot] + 1;
      pre[seg2.r + 1] = pre[lot] + suc[lot] + 1;
      pre[lot] = suc[lot] = 0;
      S.insert(Seg(seg1.l, seg2.r));
    }
  }
  return 0;
}
