#include<bits/stdc++.h>
using namespace std;
const int N=4e5+1;
int d[2][N],vis[N],dead[N],fa[N],v[N];
int n,m;
vector<int>g[N];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int fd(int x){
return fa[x]==x?x:fa[x]=fd(fa[x]);
}
void unity(int x,int y){
fa[fd(x)]=fd(y);
}
int ltk(){
int ans=0;
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++){
if (v[fd(i)]==0&&vis[i]==0){
ans++;
v[fd(i)]=1;
}
}
return ans;
}
stack<int>ans;
int main(){
n=read(),m=read();
for(int i=0;i<n;i++) fa[i]=i;
for(int i=0;i<m;i++){
d[0][i]=read(),d[1][i]=read();
g[d[0][i]].push_back(d[1][i]);
g[d[1][i]].push_back(d[0][i]);
}
int k;
k=read();
for(int i=0;i<k;i++){
dead[i]=read();
vis[dead[i]]=1;
}
for(int i=0;i<m;i++){
if (vis[d[0][i]]==0&&vis[d[1][i]]==0){
unity(d[0][i],d[1][i]);
}
}
int r=ltk();
ans.push(r);
for(int j=k-1;j>=0;j--){
vis[dead[j]]=0;
map<int,int>sb;
int cnt=0;
for(int i=0;i<g[dead[j]].size();i++){
if (sb[fd(g[dead[j]][i])]==0) cnt++;
sb[fd(g[dead[j]][i])]=1;
}
for(int i=0;i<g[dead[j]].size();i++){
unity(dead[j],g[dead[j]][i]);
}
if (g[dead[j]].size()){
ans.push(r-cnt+1);
r=r-cnt+1;
}
else ans.push(r++);
}
while(ans.size()){
cout<<ans.top()<<endl;
ans.pop();
}
}