#include<bits/stdc++.h>
using namespace std;
const int N=4e5+10;
int n,m,q,ans,sol[N],p;
vector<int>v[N];
int br[N],fa[N];
bool used[N];//0是已经加了的,1是未加的。
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int main(){
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;cin>>x>>y;
v[x].push_back(y),v[y].push_back(x);
}for(int i=0;i<n;i++) fa[i]=i;
ans=n;cin>>q;
for(int i=q;i;i--) //倒着连边
{cin>>br[i];if(!used[br[i]])used[br[i]]=1,ans--;}//剩下的点数
for(int i=0;i<n;i++)
if(!used[i]) for(int j=0;j<v[i].size();j++){
int x=i,y=v[x][j];
if(used[y]) continue;
if(find(fa[x])!=find(fa[y])) fa[fa[x]]=fa[y],ans--;
}//剩下的连通块
sol[++p]=ans;
for(int i=1;i<=q;i++){
used[br[i]]=0,ans++;
for(int j=0;j<v[br[i]].size();j++){
int x=br[i],y=v[x][j];
if(used[y]) continue;
if(find(fa[x])!=find(fa[y])) fa[fa[x]]=fa[y],ans--;//开始加边
}
sol[++p]=ans;
}
for(int i=p;i;i--) cout<<sol[i]<<endl;//再倒回来
return 0;
}