#include <bits/stdc++.h>
using namespace std;
int n,m,k,x,y,fa[400005],a[400005],vis[400005],tot,op,s[400005];
struct node{
int x,y,h,pr;
}fa2[400005];
int find(int x){
return x==fa[x]?x:(fa[x]=find(fa[x]));
}
void unite(int x,int y){
int u=find(x),v=find(y);
if(u!=v)fa[u]=v;
}
int add(int x,int y){
op++;
fa2[op].x=x;
fa2[op].y=y;
fa2[op].pr=fa2[x].h;
fa2[x].h=op;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++){
fa[i]=i;
fa2[i].h=-1;
}
for(int i=1;i<=m;i++){
cin>>x>>y;
add(x,y);
add(y,x);
}
cin>>k;
for(int i=1;i<=k;i++){
cin>>a[i];
vis[a[i]]=1;
}
for(int i=1;i<=op;i++){
if(!vis[fa2[i].x]&&!vis[fa2[i].y])unite(fa2[i].x,fa2[i].y);
}
for(int i=0;i<n;i++){
if(!vis[i]&&fa[i]==i)tot++;
}
s[k+1]=tot;
for(int i=k;i>=1;i--){
int nx=a[i];
tot++;
vis[nx]=0;
for(int j=fa2[nx].h;j!=-1;j=fa2[j].pr){
int ny=fa2[j].y;
if(!vis[ny]&&fa[find(nx)]!=fa[find(ny)]){
unite(nx,ny);
tot--;
}
}
s[i]=tot;
}
for(int i=1;i<=k+1;i++){
cout<<s[i]<<"\n";
}
return 0;
}