#include <bits/stdc++.h>
using namespace std;
#define ios_close ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define yes puts("Yes")
#define no puts("No")
#define lowbit(x) (x) & (-x)
#define inf 0x3f3f3f3f
#define endl "\n"
#define PII pair<int, int>
typedef long long LL;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
int n, q, arr[N << 2];
struct Tree
{
int l, r;
int sum, lsum, rsum, maxsum;
Tree(int _l = 0, int _r = 0, int d = 0)
{
l = _l; r = _r;
sum = lsum = rsum = maxsum = d;
}
friend Tree operator + (const Tree& a, const Tree& b)
{
Tree res;
res.l = a.l;
res.r = b.r;
res.lsum = a.lsum;
res.rsum = b.rsum;
res.maxsum = max(a.maxsum, b.maxsum);
if (arr[a.r] != arr[b.l])
{
res.lsum = max(a.lsum, a.sum + b.lsum);
res.rsum = max(b.rsum, b.sum + a.rsum);
res.maxsum = max(res.maxsum, a.rsum + b.lsum);
res.sum = a.sum + b.sum;
}
return res;
}
};
Tree tree[N << 2];
int ls(int p) { return p << 1; }
int rs(int p) { return p << 1 | 1; }
void PushUp(int p)
{
tree[p] = tree[ls(p)] + tree[rs(p)];
}
void Build(int p, int l, int r)
{
tree[p].l = l; tree[p].r = r;
if (tree[p].l == tree[p].r)
{
arr[l] = 0;
tree[p] = Tree(l, r, 1);
}
else
{
int mid = (tree[p].l + tree[p].r) >> 1;
Build(ls(p), l, mid + 0);
Build(rs(p), mid + 1, r);
PushUp(p);
}
}
void Change(int p, int x)
{
if (tree[p].l != tree[p].r)
{
int mid = (tree[p].l + tree[p].r) >> 1;
if (x <= mid)Change(ls(p), x);
if (mid < x) Change(rs(p), x);
PushUp(p);
}
}
void Solve()
{
cin >> n >> q;
Build(1, 1, n);
while (q--)
{
int x; cin >> x;
arr[x] ^= 1;
Change(1, x);
cout << tree[1].maxsum << endl;
}
return;
}
signed main()
{
ios_close;
int _ = 1;
while (_--)
Solve();
return 0;
}