#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
int n, m, Q, a[300006][2], fa[300006], dep[300006], siz[300006], b[300006], D;
bool vis[300006];
map<int, int> mp[300006];
vector<int> v[300006], s[300006];
const double pi = acos(-1.0);
void df5(int te, int la) {
  vis[te] = 1;
  siz[te] = 1;
  for (int i = 0; i < v[te].size(); i++) {
    int j = v[te][i];
    if (j == la) continue;
    if (vis[j]) continue;
    dep[j] = dep[te] + 1;
    fa[j] = te;
    df5(j, te);
    siz[te] += siz[j];
  }
}
inline double getde(int x, int y) {
  double ret = atan2(1.0 * a[y][1] - a[x][1], 1.0 * a[y][0] - a[x][0]);
  if (ret < 0) ret += 2.0 * pi;
  return ret;
}
inline bool cmp(int x, int y) { return getde(D, x) < getde(D, y); }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    v[x].push_back(y), v[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) scanf("%d%d", &a[i][0], &a[i][1]);
  df5(1, 1);
  for (int i = 1; i <= n; i++) {
    D = i;
    sort(v[i].begin(), v[i].end(), cmp);
    for (int j = 0; j < v[i].size(); j++) mp[i][v[i][j]] = j;
    if (!v[i].empty()) {
      if (v[i][0] == fa[i])
        s[i].push_back(-siz[i]);
      else if (fa[v[i][0]] == i)
        s[i].push_back(siz[v[i][0]]);
      else
        s[i].push_back(0);
    }
    for (int j = 1; j < v[i].size(); j++) {
      int x = v[i][j], la = s[i][j - 1];
      if (x == fa[i])
        s[i].push_back(la - siz[i]);
      else if (fa[x] == i)
        s[i].push_back(la + siz[x]);
      else
        s[i].push_back(la);
    }
  }
  scanf("%d", &Q);
  while (Q--) {
    int k;
    scanf("%d", &k);
    bool hv1 = false;
    for (int i = 1; i <= k; i++) scanf("%d", &b[i]);
    for (int i = 1; i <= k; i++)
      if (b[i] == 1) {
        hv1 = true;
        break;
      }
    long long sum = 0;
    bool flag = false;
    for (int i = 1; i <= k; i++) {
      int ii = i % k + 1;
      sum += (1ll * (a[b[i]][0] - a[b[ii]][0]) * a[b[i]][1] -
              1ll * a[b[i]][0] * (a[b[i]][1] - a[b[ii]][1]));
    }
    if (sum > 0) flag = true;
    long long ans = 0;
    if (!flag) {
      for (int i = 2, j = k; i < j; i++, j--) swap(b[i], b[j]);
    }
    for (int i = 1; i <= k; i++) {
      int la = i - 1;
      if (!la) la = k;
      int nx = i % k + 1;
      int ts1 = mp[b[i]][b[la]], ts2 = mp[b[i]][b[nx]],
          tt = ((int)v[b[i]].size()) - 1;
      if (ts1 >= ts2) {
        if (ts1) ans += s[b[i]][ts1];
        if (ts2) ans -= s[b[i]][ts2 - 1];
      } else {
        ans += s[b[i]][ts1];
        if (ts2) ans += s[b[i]][tt] - s[b[i]][ts2 - 1];
      }
    }
    ans += k;
    if (ans <= 0) ans += n;
    printf("%lld\n", ans);
  }
}
