#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 200000 + 10;
const int INF = 100000000;
struct TreeNode {
  long long sum;
  long long maxL, maxR, maxS;
};
int n, m;
TreeNode tree[MAX_N * 4];
map<int, int> car;
void buildTree(int t, int l, int r) {
  tree[t].maxS = r - l + 1;
  tree[t].maxL = r - l + 1;
  tree[t].maxR = r - l + 1;
  tree[t].sum = r - l + 1;
  if (l < r) {
    buildTree(((t) << 1), l, (((l) + (r)) >> 1));
    buildTree((((t) << 1) + 1), (((l) + (r)) >> 1) + 1, r);
  }
}
void update(int t) {
  int l = ((t) << 1), r = (((t) << 1) + 1);
  tree[t].maxL = max(tree[l].maxL, tree[l].sum + tree[r].maxL);
  tree[t].maxR = max(tree[r].maxR, tree[r].sum + tree[l].maxR);
  tree[t].maxS = max(tree[l].maxS, tree[r].maxS);
  tree[t].maxS = max(tree[t].maxS, tree[l].maxR + tree[r].maxL);
  tree[t].sum = tree[l].sum + tree[r].sum;
}
void insert(int t, int l, int r, int x) {
  if (r < x || x < l) {
    return;
  }
  if (l == r) {
    tree[t].sum = 1;
    tree[t].maxL = 1;
    tree[t].maxR = 1;
    tree[t].maxS = 1;
  } else {
    insert(((t) << 1), l, (((l) + (r)) >> 1), x);
    insert((((t) << 1) + 1), (((l) + (r)) >> 1) + 1, r, x);
    update(t);
  }
}
void remove(int t, int l, int r, int x) {
  if (r < x || x < l) {
    return;
  }
  if (l == r) {
    tree[t].sum = -INF;
    tree[t].maxL = 0;
    tree[t].maxR = 0;
    tree[t].maxS = 0;
  } else {
    remove(((t) << 1), l, (((l) + (r)) >> 1), x);
    remove((((t) << 1) + 1), (((l) + (r)) >> 1) + 1, r, x);
    update(t);
  }
}
int find(int t, int l, int r, int x) {
  if (l == r) {
    return l - 1;
  }
  if (tree[((t) << 1)].maxS >= x) {
    return find(((t) << 1), l, (((l) + (r)) >> 1), x);
  }
  if (tree[((t) << 1)].maxR + tree[(((t) << 1) + 1)].maxL >= x) {
    return (((l) + (r)) >> 1) - tree[((t) << 1)].maxR;
  }
  return find((((t) << 1) + 1), (((l) + (r)) >> 1) + 1, r, x);
}
void park(int pos, int id) {
  car[id] = pos;
  remove(1, 1, n, pos);
  printf("%d\n", pos);
}
void arrive(int id) {
  int temp = (tree[1].maxS + 1) / 2;
  if (tree[1].maxL >= temp && tree[1].maxL >= tree[1].maxR) {
    park(1, id);
  } else if (temp >= tree[1].maxR) {
    int k = find(1, 1, n, 2 * temp - 1) + temp;
    park(k, id);
  } else {
    park(n, id);
  }
}
void depart(int id) { insert(1, 1, n, car[id]); }
int main(int argc, char *argv[]) {
  scanf("%d%d", &n, &m);
  buildTree(1, 1, n);
  int cmd, id;
  while (m--) {
    scanf("%d%d", &cmd, &id);
    if (cmd == 1) {
      arrive(id);
    } else {
      depart(id);
    }
  }
  return 0;
}
