#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 110
typedef struct{
char vexs[N];
int edge[N][N];
int n, e;
}matrix_graph;
int vis[N], cnt;
void creatMG(matrix_graph &g)
{
int u, v;
scanf("%d%d", &g.n, &g.e);
getchar();
for(int i=1; i<=g.n; i++)
for(int j=1; j<g.n; j++)
g.edge[i][j]=0;
for(int i=0; i<g.n; i++)
scanf("%c", &g.vexs[i]);
getchar();
for(int i=0; i<g.e; i++)
{
scanf("%d%d", &u, &v);
g.edge[u][v]=g.edge[v][u]=1;
}
}
void DFS(matrix_graph g, int u)
{
vis[u]=1;
for(int i=1; i<=g.n; i++)
{
if(!vis[i]&&g.edge[u][i])
DFS(g, i);
}
}
void DFSM(matrix_graph g)
{
for(int i=1; i<=g.n; i++)
if(!vis[i])
{
cnt++;
DFS(g, i);
}
}
int main()
{
matrix_graph g;
memset(vis, 0, sizeof(vis));
cnt=0;
creatMG(g);
DFSM(g);
printf("%d\n", cnt);
return 0;
}