#include <bits/stdc++.h>
using namespace std;
long long input() {
  long long x;
  scanf("%lld", &x);
  return x;
}
const int inf = 1e9;
int clamp(int a, int l, int r) {
  if (a < l) a = l;
  if (a > r) a = r;
  return a;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<int> pos(1010101, -1);
  vector<int> L(1010101, -1), R(1010101, -1);
  set<tuple<int, int, int, int>> st;
  const int MostLeft = 1010101 - 2;
  const int MostRight = 1010101 - 3;
  pos[MostLeft] = -inf;
  pos[MostRight] = inf;
  const auto calcPos = [&](int i, int j) {
    if (i == MostLeft && j == MostRight) return 1;
    return clamp((pos[i] + pos[j]) / 2, 1, n);
  };
  const auto calcDist = [&](int i, int j) {
    if (i == MostLeft && j == MostRight)
      return n - 1;
    else if (i == MostLeft)
      return pos[j] - 1;
    else if (j == MostRight)
      return n - pos[i];
    return (pos[j] - pos[i]) / 2;
  };
  for (int ii = 0; ii < m; ii++) {
    int t = input();
    int id = input();
    if (t == 1) {
      int lid, rid;
      if (st.empty()) {
        lid = MostLeft;
        rid = MostRight;
      } else {
        tie(ignore, ignore, lid, rid) = *st.begin();
        st.erase(st.begin());
      }
      pos[id] = calcPos(lid, rid);
      R[lid] = L[rid] = id;
      L[id] = lid;
      R[id] = rid;
      st.emplace(-calcDist(lid, id), pos[lid], lid, id);
      st.emplace(-calcDist(id, rid), pos[id], id, rid);
      printf("%d\n", pos[id]);
    } else {
      int lid = L[id];
      int rid = R[id];
      R[lid] = rid;
      L[rid] = lid;
      st.erase(make_tuple(-calcDist(lid, id), pos[lid], lid, id));
      st.erase(make_tuple(-calcDist(id, rid), pos[id], id, rid));
      st.emplace(-calcDist(lid, rid), pos[lid], lid, rid);
    }
  }
}
