#include <bits/stdc++.h>
using namespace std;
int n, m, t;
pair<int, int> a[300005];
int b[300005];
int force(int ll, int rr) {
  int r = 0;
  for (int i = 1; i <= n; i++)
    if (a[i].first >= ll && a[i].second <= rr) r++;
  return r;
}
struct indexed_tree_2d {
  vector<int> T[1000006];
  void set(int first, int second) {
    for (int i = first; i < 1000006; i += i & -i) T[i].push_back(second);
  }
  void end_update() {
    for (int i = 1; i < 1000006; i++) sort(T[i].begin(), T[i].end());
  }
  int get(int first, int second) {
    int r = 0;
    for (int i = first; i >= 1; i -= i & -i)
      r += upper_bound(T[i].begin(), T[i].end(), second) - T[i].begin();
    return r;
  }
  int get(int x1, int y1, int x2, int y2) {
    return get(x2, y2) - get(x1 - 1, y2) - get(x2, y1 - 1) +
           get(x1 - 1, y1 - 1);
  }
} tr;
int f(int ll, int rr) {
  if (ll > rr) return 0;
  return tr.get(ll, ll, rr, rr);
}
int main() {
  scanf("%d%d", &n, &t);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &a[i].first, &a[i].second);
  }
  for (int i = 1; i <= n; i++) tr.set(a[i].first, a[i].second);
  tr.end_update();
  for (int i = 1; i <= t; i++) {
    int answer = n;
    scanf("%d", &m);
    for (int j = 1; j <= m; j++) {
      scanf("%d", &b[j]);
    }
    sort(b + 1, b + m + 1);
    b[m + 1] = 1000006;
    for (int j = 1; j <= m + 1; j++) answer -= f(b[j - 1] + 1, b[j] - 1);
    printf("%d\n", answer);
  }
}
