#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 20, MAXV = 1e6 + 20;
int n, m;
class ParkingLot {
  int n, pos[MAXV], *vis;
  map<int, int> rmp;
  set<pair<int, int>> rep;

 public:
  ParkingLot(int n);
  ~ParkingLot();
  int park(int c);
  void depart(int c);
  void put(int x, pair<int, int> seg);
};
ParkingLot::ParkingLot(int n) : n(n) {
  vis = new int[n + 2];
  memset(vis, 0, sizeof(int) * (n + 2));
  vis[0] = vis[n + 1] = 1;
  rmp[1] = n;
  rep.insert({-((n - 1) / 2), 1});
}
ParkingLot::~ParkingLot() { delete vis; }
int ParkingLot::park(int c) {
  int l = vis[1] ? -1 : rmp[1] - 1, mid = -rep.begin()->first,
      r = vis[n] ? -1 : n - rmp.rbegin()->first;
  if (l >= mid || r > mid) {
    if (l >= r) {
      put(1, {-((rmp[1] - 1) / 2), 1});
      pos[c] = 1;
    } else {
      put(n, {-((n - rmp.rbegin()->first) / 2), rmp.rbegin()->first});
      pos[c] = n;
    }
  } else {
    auto tmp = *rep.begin();
    int len = -tmp.first, st = tmp.second;
    put(st + len, tmp);
    pos[c] = st + len;
  }
  vis[pos[c]] = 1;
  return pos[c];
}
void ParkingLot::put(int x, pair<int, int> seg) {
  int st = seg.second;
  rep.erase(seg);
  if (x > st) rep.insert({-((x - st - 1) / 2), st});
  if (x < rmp[st]) rep.insert({-((rmp[st] - x - 1) / 2), x + 1});
  if (rmp[st] > x) rmp[x + 1] = rmp[st];
  if (st < x)
    rmp[st] = x - 1;
  else
    rmp.erase(st);
}
void ParkingLot::depart(int c) {
  int x = pos[c];
  if (!vis[x - 1] && !vis[x + 1]) {
    int st = prev(rmp.upper_bound(x))->first;
    rep.erase({-((x - st - 1) / 2), st});
    int ed = rmp[x + 1];
    rep.erase({-((ed - x - 1) / 2), x + 1});
    rmp.erase(x + 1);
    rmp[st] = ed;
    rep.insert({-((ed - st) / 2), st});
  } else if (!vis[x - 1]) {
    int st = prev(rmp.upper_bound(x))->first;
    rep.erase({-((x - st - 1) / 2), st});
    rep.insert({-((x - st) / 2), st});
    rmp[st] = x;
  } else if (!vis[x + 1]) {
    int ed = rmp[x + 1];
    rep.erase({-((ed - x - 1) / 2), x + 1});
    rmp.erase(x + 1);
    rmp[x] = ed;
    rep.insert({-((ed - x) / 2), x});
  } else {
    rmp[x] = x;
    rep.insert({0, x});
  }
  vis[x] = 0;
}
int main() {
  scanf("%d%d", &n, &m);
  static ParkingLot lot(n);
  for (int i = 0; i < m; i++) {
    int t, c;
    scanf("%d%d", &t, &c);
    if (t == 1)
      printf("%d\n", lot.park(c));
    else
      lot.depart(c);
  }
}
