#include <bits/stdc++.h>
using namespace std;
const int N = 1000000 + 10;
int n, m;
vector<int> e[N];
int ft[N];
int LSOne(int x) { return x & (-x); }
void adjust(int p, int v) {
  for (; p < N; p += LSOne(p)) ft[p] += v;
}
int rsq(int b) {
  int s = 0;
  for (; b; b -= LSOne(b)) s += ft[b];
  return s;
}
int rsq(int a, int b) { return rsq(b) - rsq(a - 1); }
struct segment {
  int l, r, idx;
  bool operator<(const segment &a) const {
    if (l != a.l) return l < a.l;
    if (r != a.r) return r < a.r;
    return idx < a.idx;
  }
} t;
vector<segment> q;
int ans[N];
int main(int argc, char *argv[]) {
  scanf("%d%d", &n, &m);
  for (int x, y, i = 0; i < n; ++i) {
    scanf("%d%d", &x, &y);
    e[x].push_back(y);
    adjust(y, 1);
  }
  for (int x, i = 0; i < m; ++i) {
    scanf("%d", &x);
    t.idx = i;
    vector<int> v;
    v.push_back(0);
    for (int y, j = 0; j < x; ++j) {
      scanf("%d", &y);
      v.push_back(y);
    }
    v.push_back(N - 5);
    sort(v.begin(), v.end());
    for (int i = 1; i < v.size(); ++i) {
      t.l = v[i - 1];
      t.r = v[i];
      q.push_back(t);
    }
  }
  sort(q.begin(), q.end());
  int l = 0;
  int cur = 0;
  for (int i = 0; i < q.size(); ++i) {
    while (l <= q[i].l) {
      for (int j = 0; j < e[l].size(); ++j) adjust(e[l][j], -1), ++cur;
      ++l;
    }
    ans[q[i].idx] += n - (rsq(q[i].r, N - 1) + cur);
  }
  for (int i = 0; i < m; ++i) printf("%d\n", n - ans[i]);
  return 0;
}
