#include <bits/stdc++.h>
using namespace std;
long long pw(long long base, long long e) {
  return e ? pw(base * base, e / 2) * (e % 2 ? base : 1) : 1;
}
const int maxn = 2e6 + 10, mod = 1e9 + 7;
const long long INF = 1e9;
vector<int> v[maxn];
int n;
int get(int l, int r, int x, int val) {
  int lx = x, rx = x + 1;
  while (lx * 2 < n) {
    lx *= 2;
  }
  while (rx * 2 < n) {
    rx *= 2;
  }
  rx--;
  if (rx < lx) {
    rx = n - 1;
  }
  if (lx >= l && rx <= r) {
    return int(v[x].size()) -
           (lower_bound(v[x].begin(), v[x].end(), val) - v[x].begin());
  }
  if (lx > r || rx < l) {
    return 0;
  }
  return get(l, r, 2 * x, val) + get(l, r, 2 * x + 1, val);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int nn, q, cnt, m;
  cin >> nn >> q;
  n = 1;
  while (n < nn) {
    n *= 2;
  }
  n *= 2;
  pair<int, int> a[n];
  for (int i = 0; i < nn; i++) {
    cin >> a[i].first >> a[i].second;
  }
  for (int i = nn; i < n; i++) {
    a[i].first = 0;
    a[i].second = 0;
  }
  sort(a, a + n);
  int b[n];
  int c[n];
  for (int i = 0; i < n; i++) {
    b[i] = a[i].second;
    c[i] = a[i].first;
  }
  for (int i = n / 2; i < n; i++) {
    v[i].push_back(a[i].second);
  }
  for (int i = n / 2 - 1; i >= 1; i--) {
    v[i].resize(2 * (int(v[i * 2].size())));
    merge(v[i * 2].begin(), v[i * 2].end(), v[i * 2 + 1].begin(),
          v[i * 2 + 1].end(), v[i].begin());
  }
  while (q--) {
    cin >> m;
    int ans = 0;
    int prev, cur;
    prev = cur = 0;
    int l, r;
    for (int i = 0; i < m; i++) {
      cin >> cur;
      l = upper_bound(c, c + n, prev) - c;
      r = upper_bound(c, c + n, cur) - c - 1;
      ans += get(l, r, 1, cur);
      prev = cur;
    }
    cout << ans << '\n';
  }
}
