#include<bits/stdc++.h>
using namespace std;
int n,q;
int a[200005];
int x;
struct Tree {
int len;
int lmax;
int rmax;
int ccfmax;
int l;
int r;
}tree[800005];
void work(int now,int k) {
tree[now].ccfmax=1;
tree[now].lmax=1;
tree[now].rmax=1;
tree[now].l=k;
tree[now].r=k;
return ;
}
void push_up(int now) {
if(tree[now*2].r!=tree[now*2+1].l) tree[now].ccfmax=max(max(tree[now*2].ccfmax,tree[now*2+1].ccfmax),max(tree[now*2].rmax+tree[now*2+1].lmax,tree[now].ccfmax));
else tree[now].ccfmax=max(tree[now*2].ccfmax,tree[now*2+1].ccfmax);
tree[now].l=tree[now*2].l;
tree[now].r=tree[now*2+1].r;
if(tree[now*2].lmax==tree[now*2].len&&tree[now*2].r!=tree[now*2+1].l) tree[now].lmax=tree[now*2].lmax+tree[now*2+1].lmax;
else tree[now].lmax=tree[now*2].lmax;
if(tree[now*2+1].rmax==tree[now*2+1].len&&tree[now*2].r!=tree[now*2+1].l) tree[now].rmax=tree[now*2+1].rmax+tree[now*2].rmax;
else tree[now].rmax=tree[now*2+1].rmax;
return ;
}
void build(int now,int left,int right) {
tree[now].len=right-left+1;
if(left==right) {
work(now,0);
return ;
}
build(now*2,left,(left+right)/2);
build(now*2+1,(left+right)/2+1,right);
push_up(now);
return ;
}
void change(int now,int left,int right,int w) {
if(left==right) {
work(now,!tree[now].l);
return ;
}
if(w<=(left+right)/2) change(now*2,left,(left+right)/2,w);
else if(w>=(left+right)/2) change(now*2+1,(left+right)/2+1,right,w);
push_up(now);
return ;
}
int main(){
scanf("%d%d",&n,&q);
build(1,1,n);
for(int i=1;i<=q;i++) {
scanf("%d",&x);
change(1,1,n,x);
printf("%d\n",tree[1].ccfmax);
}
return 0;
}