#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 10;
const long long INF = 1e18;
const int maxn = 1e6 + 5;
struct Block {
  int l, r;
  bool operator<(const Block &rhs) const {
    int dist1 = (this->r - this->l) >> 1, dist2 = (rhs.r - rhs.l) >> 1;
    if (dist1 == dist2)
      return this->l < rhs.l;
    else
      return dist1 > dist2;
  }
};
set<Block> blocks;
map<int, int> mp;
int n, m;
int pos[maxn];
void removeSeg(int lf, int rg) {
  set<Block>::iterator it = blocks.lower_bound((Block){lf, rg});
  while (it->l != lf) ++it;
  blocks.erase(it);
}
int MAIN() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; ++i) {
    int op, id;
    scanf("%d%d", &op, &id);
    if (op == 1) {
      if (mp.empty()) {
        pos[id] = 1;
      } else {
        int dist_block = -1, lf, rg;
        if (!blocks.empty()) {
          lf = blocks.begin()->l, rg = blocks.begin()->r;
          dist_block = (rg - lf) >> 1;
        }
        int dist_head = -1, dist_tail = -1;
        int head, tail;
        if (!mp.empty()) {
          head = mp.begin()->first, tail = mp.rbegin()->first;
          dist_head = head - 1;
          dist_tail = n - tail;
        }
        if (dist_head >= dist_tail && dist_head >= dist_block) {
          pos[id] = 1;
          blocks.insert((Block){1, head});
        } else if (dist_block >= dist_tail && dist_block > dist_head) {
          pos[id] = (lf + rg) >> 1;
          blocks.erase(blocks.begin());
          blocks.insert((Block){lf, pos[id]});
          blocks.insert((Block){pos[id], rg});
        } else {
          pos[id] = n;
          blocks.insert((Block){tail, n});
        }
      }
      printf("%d\n", pos[id]);
      mp[pos[id]] = id;
    } else {
      int head = mp.begin()->second, tail = mp.rbegin()->second;
      if (id == head) {
        int lf = mp.begin()->first;
        mp.erase(lf);
        if (!mp.empty()) {
          int rg = mp.begin()->first;
          removeSeg(lf, rg);
        }
      } else if (id == tail) {
        int rg = mp.rbegin()->first;
        mp.erase(rg);
        if (!mp.empty()) {
          int lf = mp.rbegin()->first;
          removeSeg(lf, rg);
        }
      } else {
        map<int, int>::iterator it = mp.lower_bound(pos[id]);
        int lf = (--it)->first;
        ++it;
        int rg = (++it)->first;
        --it;
        int mid = pos[id];
        mp.erase(it);
        removeSeg(lf, mid);
        removeSeg(mid, rg);
        blocks.insert((Block){lf, rg});
      }
    }
  }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL), cout.tie(NULL);
  cout << fixed << setprecision(16);
  int ret = MAIN();
  return ret;
}
