#include <bits/stdc++.h>
using namespace std;
int op, id, pos[10 * 222222], n, m;
int lsum[222222 << 2], rsum[222222 << 2], msum[222222 << 2], beg[222222 << 2];
void build(int l, int r, int rt) {
  lsum[rt] = rsum[rt] = msum[rt] = r - l + 1;
  beg[rt] = l;
  if (l == r) return;
  int m = (l + r) >> 1;
  build(l, m, rt << 1);
  build(m + 1, r, rt << 1 | 1);
}
void push_up(int rt, int l, int r) {
  int m = r - l + 1;
  lsum[rt] =
      lsum[rt << 1] + (lsum[rt << 1] == (m - (m >> 1)) ? lsum[rt << 1 | 1] : 0);
  rsum[rt] =
      rsum[rt << 1 | 1] + (rsum[rt << 1 | 1] == (m >> 1) ? rsum[rt << 1] : 0);
  msum[rt] = msum[rt << 1];
  beg[rt] = beg[rt << 1];
  if (rsum[rt << 1] + lsum[rt << 1 | 1] > msum[rt] + 1 ||
      (rsum[rt << 1] + lsum[rt << 1 | 1] > msum[rt] && msum[rt] % 2 == 0)) {
    msum[rt] = rsum[rt << 1] + lsum[rt << 1 | 1];
    beg[rt] = ((l + r) >> 1) - rsum[rt << 1] + 1;
  }
  if (msum[rt << 1 | 1] > msum[rt] + 1 ||
      (msum[rt << 1 | 1] > msum[rt] && msum[rt] % 2 == 0)) {
    msum[rt] = msum[rt << 1 | 1];
    beg[rt] = beg[rt << 1 | 1];
  }
}
void update(int pos, int val, int l, int r, int rt) {
  if (l == r) {
    lsum[rt] = rsum[rt] = msum[rt] = (val == 0 ? 0 : 1);
    return;
  }
  int m = (l + r) >> 1;
  if (pos <= m)
    update(pos, val, l, m, rt << 1);
  else
    update(pos, val, m + 1, r, rt << 1 | 1);
  push_up(rt, l, r);
}
int findpos() {
  int final = 1, len = msum[1], s = beg[1];
  if (s + len - 1 == n && s != 1) {
    final = n;
  } else {
    int mmax = lsum[1] - 1;
    if ((len - 1) / 2 > mmax) {
      mmax = (len - 1) / 2;
      final = s + (len - 1) / 2;
    }
    if (rsum[1] - 1 > mmax) {
      mmax = rsum[1] - 1;
      final = n;
    }
  }
  return final;
}
int main() {
  scanf("%d%d", &n, &m);
  build(1, n, 1);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &op, &id);
    if (op == 1) {
      int ret = findpos();
      printf("%d\n", ret);
      update(ret, 0, 1, n, 1);
      pos[id] = ret;
    } else {
      update(pos[id], 1, 1, n, 1);
    }
  }
  return 0;
}
