#include <stdio.h>
//#include <conio.h>

long n,m,klawisze[400001][3],liczba;
char stan[200001],stop;
char bylo[1050001]; // Maksymalnie dla n==20
long teraz[200001],pozniej[200001], SUM;


long liczba_ze_stanu()
{
long LL=stan[1];
for (int qwe=2; qwe<=n; qwe++)   LL=LL*2+stan[qwe];
return LL;
}


int stan_z_liczby(long liczba)
{
for (int qwe=n; qwe>=1; qwe--)
	{
	 stan[qwe] = liczba % 2;
	 liczba = liczba/2;
	}
return 0;
}


int main()
{
scanf("%ld",&n);
scanf("%ld",&m);
for (int ii=1; ii<=n; ii++)   scanf("%d",&stan[ii]);
for (int ii=1; ii<=m; ii++)   scanf("%ld %ld",&klawisze[ii][1], &klawisze[ii][2]);

if (m==0) {printf("1"); return 0;}

for (int ii=0; ii<=1050000; ii++) bylo[ii]=0;
// Zamieniam stan na liczbę:
pozniej[0]=1;   pozniej[pozniej[0]]=liczba_ze_stanu();
bylo[ pozniej[pozniej[0]] ] = 1;

stop=0;
while (!stop)
	{
	 for (int ii=0; ii<=pozniej[0]; ii++)   teraz[ii] = pozniej[ii];
	 pozniej[0]=0;
	 
	 if (teraz[0]==0)   stop=1;
	 // Po kolei sprawdzam zapisane stany:
	 for (int ter=1; ter<=teraz[0]; ter++)
	 	{
	 	 // Na podstawie liczby tworzę dany stan:
	 	 stan_z_liczby(teraz[ter]);
	 	 
//	 	 printf("Biezaca liczba: %ld\n",teraz[ter]);
//	 	 printf("Stan: ");    for (int ii=1; ii<=n; ii++)   printf("%d ",stan[ii]);
//	 	 printf("\n\n");
	 	 
	 	 // Teraz po kolei próbuję każdego z przycisków i sprawdzam, czy któryś może zadziałać.
	 	 for (int klaw=1; klaw<=m; klaw++)
	 	 	{
	 	 	 if ( stan[ klawisze[klaw][1] ] == stan [ klawisze[klaw][2] ] )
	 	 	 	{
//	 	 	 	 printf("Zadzialal klawisz (%ld,%ld)\n",klawisze[klaw][1],klawisze[klaw][2]);
//	 	 	 	 getch();
	 	 	 	 
	 	 	 	 // Ten zadziała, więc chwilowo włączam ten klawisz
	 	 	 	 stan[ klawisze[klaw][1] ] = (stan[ klawisze[klaw][1] ]+1) % 2;
	 	 	 	 stan[ klawisze[klaw][2] ] = stan[ klawisze[klaw][1] ];
	 	 	 	 
	 	 	 	 // Sprawdzam, czy ten stan już wcześniej był rozpatrywany:
	 	 	 	 liczba = liczba_ze_stanu();
	 	 	 	 if (bylo[liczba]==0)
	 	 	 	 	{ // Tego stanu jeszcze nie było - zapisuję do zrobienia później
	 	 	 	 	 pozniej[0]++;
	 	 	 	 	 pozniej[pozniej[0]] = liczba;
	 	 	 	 	 bylo[liczba]=1;
//	 	 	 	 	 if (pozniej[0] >=200000) printf("PRZEKROCZYLEM LIMIT!!!!\n");
	 	 	 	 	}
	 	 	 	 
	 	 	 	 // Już sprawdziłem, więc wracam z tym klawiszem
	 	 	 	 stan[ klawisze[klaw][1] ] = (stan[ klawisze[klaw][1] ]+1) % 2;
	 	 	 	 stan[ klawisze[klaw][2] ] = stan[ klawisze[klaw][1] ];
	 	 	 	}
	 	 	}
	 	 
	 	}
	}
// Zapisalem wszystkie stany, teraz trzeba to podliczyc:
SUM=0;
for (int ii=0; ii<=1050000; ii++)    if (bylo[ii]==1) SUM++;

/*
printf("Wypis:\n");
for (int ii=0; ii<=1050000; ii++)    if (bylo[ii]==1) 
	{
	 stan_z_liczby(ii);
	 for (int jj=1; jj<=n; jj++)   printf("%d ",stan[jj]);
	 printf("\n");
	}
*/




//printf("W sumie mozliwe stany to: %ld\n",SUM);
printf("%ld",SUM);

return 0;
}




