#include<iostream>
#include<vector>
using namespace std;
int n,m,k;
struct edge{
int from,to;
}eg[400005];
int aim[400005];
int fa[400005],vis[400005];
int ans[400005];
vector<int> v[400005];
int find(int x){
if(fa[x]==x) return x;
else return fa[x]=find(fa[x]);
}
void join(int x,int y){
int t=find(x),k=find(y);
if(t!=k) fa[t]=k;
}
bool check(int x,int y){
int t=find(x),k=find(y);
return t==k;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<=m;i++){
cin>>eg[i].from>>eg[i].to;
eg[i].from++;eg[i].to++;
v[eg[i].from].push_back(eg[i].to);
v[eg[i].to].push_back(eg[i].from);
}
cin>>k;
for(int i=1;i<=k;i++){
cin>>aim[i];
aim[i]++;
vis[aim[i]]=1;
}
for(int i=1;i<=m;i++){
int u=eg[i].from,v=eg[i].to;
if(!vis[u]&&!vis[v]){
join(u,v);
}
}
int tot=0;
for(int i=1;i<=n;i++){
if(fa[i]==i&&!vis[i]){
tot++;
}
}
ans[k+1]=tot;
for(int i=k;i>=1;i--){
vis[aim[i]]=0;
for(int j=0;j<v[aim[i]].size();j++){
if(!vis[v[aim[i]][j]]){
if(fa[aim[i]]!=aim[i]&&!check(aim[i],v[aim[i]][j])) tot--;
join(aim[i],v[aim[i]][j]);
}
}
ans[i]=tot;
}
for(int i=1;i<=k+1;i++){
cout<<ans[i]<<"\n";
}
return 0;
}