#include <bits/stdc++.h>
using namespace std;
struct FenwickTree {
  vector<int> v;
  FenwickTree(int n) : v(n, 0) {}
  void add(int i, int x) {
    for (; i < v.size(); i |= i + 1) v[i] += x;
  }
  int sum(int i) {
    int r = 0;
    for (--i; i >= 0; i = (i & (i + 1)) - 1) r += v[i];
    return r;
  }
  int sum(int left, int right) { return sum(right) - sum(left); }
};
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  vector<pair<int, int> > lr;
  for (int(i) = 0; (i) < (int)(n); ++(i)) {
    int l, r;
    scanf("%d%d", &l, &r);
    lr.push_back(make_pair((l), (r)));
  }
  sort((lr).begin(), (lr).end());
  vector<pair<pair<int, int>, int> > queries;
  vector<pair<int, int> > points;
  vector<int> ans(m, n);
  for (int(i) = 0; (i) < (int)(m); ++(i)) {
    int cnt;
    scanf("%d", &cnt);
    int prev = 0;
    for (int(j) = 0; (j) < (int)(cnt + 1); ++(j)) {
      int p;
      if (j == cnt)
        p = 1000001;
      else
        scanf("%d", &p);
      queries.push_back(make_pair((make_pair((prev + 1), (p))), (i)));
      prev = p;
    }
  }
  sort((queries).begin(), (queries).end());
  FenwickTree t(1000002);
  int right = n - 1;
  for (int i = queries.size() - 1; i >= 0; i--) {
    int x = queries[i].first.first, y = queries[i].first.second;
    while (right >= 0 && x <= lr[right].first) {
      t.add(lr[right].second, 1);
      right--;
    }
    ans[queries[i].second] -= t.sum(y);
  }
  for (int(i) = 0; (i) < (int)(m); ++(i)) cout << ans[i] << endl;
  return 0;
}
