#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 2e5 + 10;
inline int du(void) {
int x = 0, f = 1;
char ch = getchar();
while (ch > '9' || ch < '0') { if (ch == '-')f = -1; ch = getchar(); }
while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
return x * f;
}
inline void write(int x) {
if (x < 0) { putchar('-'); x = -x; }
if (x > 9)write(x / 10);
putchar(x % 10 ^ 48);
return;
}
int n, q;
int a[N], Max[N << 2], Lmax[N << 2], Rmax[N << 2], R[N << 2], siz[N << 2], L[N << 2];
inline void push_up(int k) {
R[k] = R[k << 1 | 1], L[k] = L[k << 1];
siz[k] = siz[k << 1] + siz[k << 1 | 1];
if (Lmax[k << 1] == siz[k << 1] && R[k << 1] != L[k << 1 | 1])
Lmax[k] = siz[k << 1] + Lmax[k << 1 | 1];
else Lmax[k] = Lmax[k << 1];
if (R[k << 1] != L[k << 1 | 1] && Lmax[k << 1 | 1] == siz[k << 1 | 1])
Rmax[k] = siz[k << 1 | 1] + Rmax[k << 1];
else Rmax[k] = Rmax[k << 1 | 1];
Max[k] = max(Max[k << 1], Max[k << 1 | 1]);
if (R[k << 1] != L[k << 1 | 1])
Max[k] = max(Max[k], Rmax[k << 1] + Lmax[k << 1 | 1]);
Max[k] = max(Max[k], max(Lmax[k], Rmax[k]));
return;
}
inline void build(int k, int l, int r) {
Max[k] = Lmax[k] = Rmax[k] = 1;
if (l == r) {
siz[k] = 1;
R[k] = L[k] = 1;
return;
}
int mid = (l + r) >> 1;
build(k << 1, l, mid);
build(k << 1 | 1, mid + 1, r);
push_up(k);
siz[k] = siz[k << 1] + siz[k << 1 | 1];
return;
}
inline void update(int k, int l, int r, int where, int v) {
if (l > where || r < where)
return;
if (l == r && l == where) {
R[k] = L[k] = v;
a[where] = v;
return;
}
int mid = (l + r) >> 1;
update(k << 1, l, mid, where, v);
update(k << 1 | 1, mid + 1, r, where, v);
push_up(k);
return;
}
int main(void) {
n = du(), q = du();
for (int i = 1; i <= n; ++i)
a[i] = 1;
build(1, 1, n);
for (int i = 1; i <= q; ++i) {
int x;
x = du();
if (a[x] == 1)
update(1, 1, n, x, 2);
if(a[x] == 2) update(1, 1, n, x, 1);
write(Max[1]);
putchar('\n');
}
return 0;
}