#include<bits/stdc++.h>
using namespace std;
const int N=200001;
struct segt
{
int s[4*N],h[4*N],l[4*N],r[4*N],len[4*N],ans[4*N];
int tmax(int a,int b,int c)
{
return max(a,max(b,c));
}
void pushdown(int u,int w)
{
s[u]=h[u]=ans[u]=1;
l[u]=r[u]=w;
}
void pushup(int u)
{
if(l[u<<1|1]^r[u<<1])
ans[u]=tmax(s[u<<1|1]+h[u<<1],ans[u<<1],ans[u<<1|1]);
else ans[u]=max(ans[u<<1],ans[u<<1|1]);
l[u]=l[u<<1];
r[u]=r[u<<1|1];
if(s[u<<1]==len[u<<1]&&l[u<<1|1]^r[u<<1])s[u]=s[u<<1]+s[u<<1|1];
else s[u]=s[u<<1];
if(h[u<<1|1]==len[u<<1|1]&&l[u<<1|1]^r[u<<1])h[u]=h[u<<1]+h[u<<1|1];
else h[u]=s[u<<1|1];
}
void build(int u,int l,int r)
{
len[u]=r-l+1;
if(l==r)
{
pushdown(u,0);
return;
}
int mid=(l+r)/2;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
void update(int u,int lt,int rt,int v)
{
if(l==r)
{
pushdown(u,!l[u]);
return;
}
int mid=(lt+rt)/2;
if(v<=mid)update(u<<1,lt,mid,v);
else update(u<<1|1,mid+1,rt,v);
pushup(u);
}
};//魔改线段树板子
int main()
{
segt st;
int n,m;
cin>>n>>m;
st.build(1,1,n);
while(m--)
{
int u;
cin>>u;
st.update(1,1,n,u);
cout<<(st.ans)[1]<<'\n';
}
return 0;
}//主程序15行,比前面简单多了