#include <bits/stdc++.h>
using namespace std;
const int MAX = 2e5 + 5;
vector<int> star[MAX];
bool gone[MAX];
int kill_order[MAX];
int ans[MAX];
int dad[MAX];
int size[MAX];
int find(int x) {
if (dad[x] == x) {
return x;
} else {
return find(dad[x]);
}
}
void merge(int x, int y) {
x = find(x);
y = find(y);
if (x != y) {
if (size[x] > size[y]) swap(x, y);
dad[x] = y;
size[y] += size[x];
}
}
int main() {
int N, M;
cin >> N >> M;
for (int i = 0; i < M; i++) {
int a, b;
cin >> a >> b;
star[a].push_back(b);
star[b].push_back(a);
}
int K;
cin >> K;
for (int i = 0; i < K; i++) {
cin >> kill_order[i];
gone[kill_order[i]] = true;
}
for (int i = 0; i < N; i++) {
dad[i] = i;
size[i] = 1;
}
int cnt = 0;
for (int i = 0; i < N; i++) {
if (!gone[i]) {
cnt++;
for (int neighbor : star[i]) {
if (!gone[neighbor]) {
if (find(i) != find(neighbor)) {
merge(i, neighbor);
cnt--;
}
}
}
}
}
ans[K] = cnt;
for (int i = K - 1; i >= 0; i--) {
int x = kill_order[i];
gone[x] = false;
cnt++;
for (int neighbor : star[x]) {
if (!gone[neighbor]) {
if (find(x) != find(neighbor)) {
merge(x, neighbor);
cnt--;
}
}
}
ans[i] = cnt;
}
for (int i = 0; i <= K; i++) {
cout << ans[i] << '\n';
}
return 0;
}