#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<algorithm>
#include<set>
#include<utility>

#define system(x) 



using namespace std;

typedef pair<int, int> interval;
#define last second

#define MAXN 200000 //200 000

int n, q;
char a[MAXN];

set<interval> inter;
multiset<int> sizes;

void erase(interval it)
{
	inter.erase(it);
	sizes.erase(it.last-it.first+1);
	//printf("DB)E: %d %d\n", it.first, it.last);
}

void add(interval it, bool warn=true)
{
	if(it.first>it.last && warn)
	{
		//printf("DB): ERROR: Bogey %d %d\n", it.first, it.last);
		return;
	}
	inter.insert(it);
	sizes.insert(it.last-it.first+1);
	//printf("DB)S: %d %d\n", it.first, it.last);
}

void changev(int l)
{
	set<interval>::const_iterator it;
	interval chan=*(it=inter.lower_bound(make_pair(l, l)));
	bool b=0;
	a[l]=!a[l];
	if(l==0)
	{
		if(a[l]!=a[l+1]) //dodajemo u interval desno
		{
			//printf("DB): addr\n");
			interval tom=*++it;
			erase(chan);
			erase(tom);
			add(make_pair(0, tom.last));
			return;
		}
		if(a[l]==a[l+1]) //odbacujemo iz intervala desno
		{
			//printf("DB): rem\n");
			erase(chan);
			add(make_pair(l, l));
			add(make_pair(chan.first+1, chan.last));
			return;
		}
	}
	if(l==n-1)
	{
		if(a[l-1]!=a[l]) //dodajemo u interval lijevo
		{
			//printf("DB): addl\n");
			interval tom=*--it;
			erase(chan);
			erase(tom);
			add(make_pair(tom.first, l));
			return;
		}
		if(a[l-1]==a[l]) //odbacujemo iz intervala lijevo
		{
			//printf("DB): rem\n");
			erase(chan);
			add(make_pair(l, l));
			add(make_pair(chan.first, chan.last-1));
			return;
		}
	}
	if(a[l]!=a[l-1] && a[l]!=a[l+1]) //spajamo intervale
	{
		interval tom=*++it;
		--it;
		interval tom2=*--it;
		++it;
		//printf("DB): merger\n");
		erase(tom);
		erase(chan);
		erase(tom2);
		chan=tom2;
		//printf("DB): merger2\n");
		add(make_pair(chan.first, tom.last));
		b=1;
		//printf("DB): mergerend\n");
		return;
	}

	if(a[l]==a[l-1] && a[l]==a[l+1]) //razdvajamo interval na dva
	{
		//printf("DB): split\n");
		erase(chan);
		interval tom=make_pair(chan.first, l-1);
		chan=make_pair(l+1, chan.last);
		add(tom);
		add(chan);
		add(make_pair(l, l));
		b=1;
		return;
	}
	
	if(!b)
	{
		if(a[l]!=a[l+1]) //dodajemo u interval desno
		{
			//printf("DB): addr\n");
			interval tom=*++it;
			erase(chan);
			erase(tom);
			add(make_pair(chan.first, l-1));
			add(make_pair(l, tom.last));
			return;
		}
		if(l==chan.first) //dodajemo u interval lijevo
		{
			//printf("DB): addl\n");
			interval tom=*--it;
			erase(chan);
			erase(tom);
			add(make_pair(l+1, chan.last));
			add(make_pair(tom.first, l));
			return;
		}
	}
}

int main()
{
	scanf("%d%d", &n, &q);
	memset(a, 0, sizeof(a));
	for(int i=0; i<n; ++i)
		add(make_pair(i, i));
	for(int i=0; i<q; ++i)
	{
		int p;
		scanf("%d", &p);
		--p;
		changev(p);
		//printf("DB)P\n");
		printf("%d\n", *--sizes.end());
	}
	
	system("pause");

	return 0;
}

