#include <bits/stdc++.h>
using namespace std;
inline int ADD(int a, int b) {
  a += b;
  if (a >= 1000000007) a -= 1000000007;
  return (int)a;
}
inline void ADDTO(int& a, int b) {
  a += b;
  if (a >= 1000000007) a -= 1000000007;
}
inline void SUBTO(int& a, int b) {
  a -= b;
  if (a < 0) a += 1000000007;
}
inline int MUL(int a, int b) { return (int)((long long)a * b % 1000000007); }
struct Interval {
  Interval() {}
  Interval(int ll, int rr) : l(ll), r(rr) {}
  int l, r;
};
bool used[200010];
int loc[1000010], L[200010], R[200010], n, m;
set<Interval> s;
bool operator<(const Interval& a, const Interval& b) {
  int dA = a.r - a.l + 1, dB = b.r - b.l + 1;
  if (a.l > 1 && a.r < n) dA = (dA + 1) / 2;
  if (b.l > 1 && b.r < n) dB = (dB + 1) / 2;
  if (dA != dB) return dA > dB;
  return a.l < b.l;
}
inline void addInterval(int l, int r) {
  Interval u(l, r);
  R[l] = r;
  L[r] = l;
  s.insert(u);
}
inline void delInterval(int l, int r) {
  Interval u(l, r);
  R[l] = -1;
  L[r] = -1;
  s.erase(u);
}
inline int park(const Interval& a) {
  if (a.l == 1) return 1;
  if (a.r == n)
    return n;
  else
    return (a.l + a.r) / 2;
}
int main() {
  while (scanf("%d%d", &n, &m) == 2) {
    s.clear();
    memset(L, -1, sizeof(L));
    memset(R, -1, sizeof(R));
    addInterval(1, n);
    while (m--) {
      int op, id;
      scanf("%d%d", &op, &id);
      if (op == 1) {
        Interval u = *s.begin();
        delInterval(u.l, u.r);
        int p = park(u);
        if (u.l <= p - 1) addInterval(u.l, p - 1);
        if (p + 1 <= u.r) addInterval(p + 1, u.r);
        loc[id] = p;
        printf("%d\n", p);
      } else {
        int p = loc[id];
        int l = p, r = p;
        if (L[p - 1] >= 0) {
          l = L[p - 1];
          delInterval(l, p - 1);
        }
        if (R[p + 1] >= 0) {
          r = R[p + 1];
          delInterval(p + 1, r);
        }
        addInterval(l, r);
      }
    }
  }
}
