#include <bits/stdc++.h>
using namespace std;
const int N = 300 * 1000 + 10;
const int inf = 1000 * 1000 + 10;
int n, m;
pair<int, int> b[N];
int seg[inf << 2];
int mark[inf << 2];
vector<pair<int, int>> query;
int ans[N];
int last[N];
inline void add(int, int = 1, int = 0, int = inf);
inline int get(int, int, int = 1, int = 0, int = inf);
int main() {
  for (int i = 0; i < N; i++) last[i] = -1;
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int l, r;
    cin >> l >> r;
    b[i] = {r, l};
  }
  sort(b, b + n);
  for (int j = 0; j < m; j++) {
    int x;
    cin >> x;
    for (int i = 0; i < x; i++) {
      int h;
      cin >> h;
      query.push_back({h, j});
    }
    query.push_back({inf, j});
  }
  sort(query.begin(), query.end());
  int p = 0;
  for (int i = 0; i < query.size(); i++) {
    while (p < n and b[p].first < query[i].first) {
      add(b[p].second);
      p++;
    }
    ans[query[i].second] += get(last[query[i].second] + 1, inf - 1);
    last[query[i].second] = query[i].first;
  }
  for (int i = 0; i < m; i++) cout << n - ans[i] << '\n';
}
inline void add(int idx, int id, int l, int r) {
  if (idx < l or r <= idx) return;
  if (l + 1 == r) {
    seg[id]++;
    return;
  }
  int mid = (l + r) >> 1, lc = id << 1, rc = lc | 1;
  add(idx, lc, l, mid);
  add(idx, rc, mid, r);
  seg[id] = seg[lc] + seg[rc];
}
inline int get(int st, int en, int id, int l, int r) {
  if (en <= l or r <= st) return 0;
  if (st <= l and r <= en) return seg[id];
  int mid = (l + r) >> 1, lc = id << 1, rc = lc | 1;
  return get(st, en, lc, l, mid) + get(st, en, rc, mid, r);
}
