#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 7, mod = 1e9 + 7;
int n, m, k, Q, a[N], x[N], y[N], siz[N], all[N];
int eid = 1, ehd[N];
map<int, int> mp[N];
struct edge {
  int v, w, rk, sum;
  double ed;
} e[N];
vector<int> q[N], pr[N];
long long det(long long x1, long long y1, long long x2, long long y2) {
  return x1 * y2 - x2 * y1;
}
void eadd(int u, int v) { mp[u][v] = ++eid, e[eid].v = v, q[u].push_back(eid); }
bool vis[N];
void dfs(int x) {
  vis[x] = true, siz[x] = 1;
  for (const int &i : q[x])
    if (!vis[e[i].v])
      dfs(e[i].v), siz[x] += siz[e[i].v], e[i].w += siz[e[i].v],
          e[i ^ 1].w -= siz[e[i].v];
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = (1); i <= (m); i++) {
    int u, v;
    cin >> u >> v, eadd(u, v), eadd(v, u);
  }
  for (int i = (1); i <= (n); i++) cin >> x[i] >> y[i];
  for (int u = (1); u <= (n); u++) {
    for (const int &i : q[u])
      e[i].ed = atan2(x[e[i].v] - x[u], y[e[i].v] - y[u]);
    sort(q[u].begin(), q[u].end(),
         [&](int aa, int bb) { return e[aa].ed < e[bb].ed; });
  }
  int rt = 1;
  for (int i = (2); i <= (n); i++)
    if (x[i] < x[rt]) rt = i;
  dfs(rt);
  dfs(1);
  for (int u = (1); u <= (n); u++)
    for (int i = (0); i <= (((int)q[u].size()) - 1); i++)
      all[u] += e[q[u][i]].w, pr[u].push_back(all[u]), e[q[u][i]].rk = i;
  cin >> Q;
  while (Q--) {
    cin >> k;
    for (int i = (1); i <= (k); i++) cin >> a[i];
    long long sum = 0;
    for (int i = (1); i <= (k); i++)
      sum += det(x[a[i]], y[a[i]], x[a[i % k + 1]], y[a[i % k + 1]]);
    if (sum > 0) reverse(a + 1, a + k + 1);
    int ns = k;
    for (int i = (1); i <= (k); i++) {
      int l = e[mp[a[i]][a[i % k + 1]]].rk,
          r = e[mp[a[i]][a[(i + k - 2) % k + 1]]].rk;
      ns += pr[a[i]][r] - (l == 0 ? 0 : pr[a[i]][l - 1]);
      if (l > r) ns += all[a[i]];
    }
    cout << ns << "\n";
  }
  return 0;
}
