#include <bits/stdc++.h>
using namespace std;
const int END = 1e6 + 10;
const int N = 1e6 + 100;
int n, m, l[N], r[N], p[N];
vector<int> v[4 * N];
void merge(int b, int e, int ind) {
  int i = 0, j = 0;
  while (i < v[ind * 2].size() || j < v[ind * 2 + 1].size()) {
    if (j != v[ind * 2 + 1].size() &&
        (i == v[2 * ind].size() || v[2 * ind][i] > v[2 * ind + 1][j]))
      v[ind].push_back(v[ind * 2 + 1][j++]);
    else
      v[ind].push_back(v[ind * 2][i++]);
  }
}
void make(int b = 0, int e = END, int ind = 1) {
  if (b == e - 1) {
    sort(v[ind].begin(), v[ind].end());
    return;
  }
  int mid = (b + e) / 2;
  make(b, mid, ind * 2);
  make(mid, e, ind * 2 + 1);
  merge(b, e, ind);
}
int sum(int l, int r, int b = 0, int e = END, int ind = 1) {
  if (l <= b && e <= r) {
    int k = lower_bound(v[ind].begin(), v[ind].end(), l) - v[ind].begin();
    return v[ind].size() - k;
  }
  int mid = (b + e) / 2;
  int ans = 0;
  if (l < mid) ans += sum(l, r, b, mid, ind * 2);
  if (r > mid) ans += sum(l, r, mid, e, ind * 2 + 1);
  return ans;
}
void add(int p, int val, int b = 0, int e = END, int ind = 1) {
  if (b == e - 1) {
    v[ind].push_back(val);
    return;
  }
  int mid = (b + e) / 2;
  if (p < mid)
    add(p, val, b, mid, ind * 2);
  else
    add(p, val, mid, e, ind * 2 + 1);
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &l[i], &r[i]);
    add(r[i], l[i]);
  }
  make();
  for (int i = 0; i < m; i++) {
    int cnt;
    scanf("%d", &cnt);
    for (int j = 0; j < cnt; j++) scanf("%d", &p[j]);
    int ans = 0;
    if (p[0] > 1) ans += sum(1, p[0]);
    for (int j = 1; j < cnt; j++) {
      if (p[j] == p[j - 1] + 1) continue;
      ans += sum(p[j - 1] + 1, p[j]);
    }
    if (p[cnt - 1] < 1e6) ans += sum(p[cnt - 1] + 1, END);
    printf("%d \n", n - ans);
  }
}
