#include <stdio.h>
#define INF 1010101010
#define KI_MAX (1 << 17) /* 131072 */
int ki[KI_MAX * 2 - 1];
void ki_add(int pos, int value) {
pos += KI_MAX - 1;
ki[pos] += value;
do {
int a, b;
pos = (pos - 1) / 2;
a = ki[pos * 2 + 1];
b = ki[pos * 2 + 2];
ki[pos] = a <= b ? a : b;
} while (pos > 0);
}
int ki_get_i(int idx, int ss, int se, int qs, int qe) {
if (qs <= ss && se <= qe) { /* セグメントがクエリに完全に含まれる */
return ki[idx];
} else if (se <= qs || qe <= ss) { /* 完全に外れている */
return INF;
} else {
int sm = ss + (se - ss) / 2;
int l = ki_get_i(idx * 2 + 1, ss, sm, qs, qe);
int r = ki_get_i(idx * 2 + 2, sm, se, qs, qe);
return l <= r ? l : r;
}
}
int ki_get(int qs, int qe) {
return ki_get_i(0, 0, KI_MAX, qs, qe);
}
int main(void) {
int N, Q;
int i;
if (scanf("%d%d", &N, &Q) != 2) return 1;
for (i = 0; i < Q; i++) {
int X;
int ans;
if (scanf("%d", &X) != 1) return 1;
if (X == 0) {
/* 「そこまでの最小値を求めると、全体の最小値になる」最初の箱に入れる */
int min = ki_get(1, N + 1);
int no = 0, yes = N;
while (no + 1 < yes) {
int m = no + (yes - no) / 2;
if (ki_get(1, m + 1) == min) yes = m; else no = m;
}
ans = yes;
} else {
ans = X;
}
ki_add(ans, 1);
printf(" %d" + !i, ans);
}
putchar('\n');
return 0;
}