#include <bits/stdc++.h>
using namespace std;
const int MAXN = 4 * 1000 * 1000 + 500;
const int INF = 1000 * 1000 + 100;
int n, m, x, y, tmp, cnt, ANS, ans[MAXN], a[MAXN], b[MAXN];
vector<int> V[MAXN], v[MAXN];
int LB(int id, int l, int r) {
  if (l >= r || V[id].empty()) return 0;
  return lower_bound((V[id]).begin(), (V[id]).end(), r) -
         lower_bound((V[id]).begin(), (V[id]).end(), l);
}
void update(int x, int xl, int xr) {
  int l = 2 * x + 1, r = l + 1, xm = (xl + xr) / 2;
  ans[x] = ans[l] + ans[r] + LB(l, xm, xr);
  merge((V[l]).begin(), (V[l]).end(), (V[r]).begin(), (V[r]).end(),
        back_inserter(V[x]));
}
void make(int x, int xl, int xr) {
  if (xr - xl == 1) {
    V[x] = v[xl];
    ans[x] += b[xl];
    return;
  }
  int l = 2 * x + 1, r = l + 1, xm = (xl + xr) / 2;
  make(l, xl, xm);
  make(r, xm, xr);
  update(x, xl, xr);
}
int ask(int x, int xl, int xr, int ql, int qr) {
  if (xr <= ql || qr <= xl) return 0;
  if (ql <= xl && xr <= qr) return ans[x] + LB(x, xr, qr);
  int l = 2 * x + 1, r = l + 1, xm = (xl + xr) / 2;
  return ask(l, xl, xm, ql, qr) + ask(r, xm, xr, ql, qr);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &x, &y);
    v[x].push_back(y);
    if (x == y) b[x]++;
  }
  for (int i = 0; i < INF; i++) sort((v[i]).begin(), (v[i]).end());
  make(0, 0, INF);
  while (m--) {
    scanf("%d", &cnt);
    ANS = 0;
    for (int i = 1; i <= cnt; i++) scanf("%d", &a[i]);
    a[0] = 0;
    a[cnt + 1] = INF - 7;
    for (int i = 0; i <= cnt; i++)
      if (a[i + 1] - a[i] - 1 > 0) ANS += ask(0, 0, INF, a[i] + 1, a[i + 1]);
    printf("%d \n", n - ANS);
  }
  return 0;
}
