#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
vector<int> tree[4 * N];
vector<int> arr[N];
void build(int node, int st, int en) {
  if (st > en) return;
  if (st == en) {
    tree[node] = arr[st];
    return;
  }
  int mid = (st + en) / 2;
  build(2 * node, st, mid);
  build(2 * node + 1, mid + 1, en);
  merge(((tree[2 * node]).begin()), ((tree[2 * node]).end()),
        ((tree[2 * node + 1]).begin()), ((tree[2 * node + 1]).end()),
        back_inserter(tree[node]));
}
long long query(int node, int st, int en, int shemal, int yemeen, int val) {
  if (st > en || st > yemeen || en < shemal) return 0;
  if (shemal <= st && en <= yemeen)
    return tree[node].end() -
           lower_bound(((tree[node]).begin()), ((tree[node]).end()), val);
  int mid = (st + en) / 2;
  long long a = query(2 * node, st, mid, shemal, yemeen, val);
  long long b = query(2 * node + 1, mid + 1, en, shemal, yemeen, val);
  return a + b;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, q;
  cin >> n >> q;
  for (auto i = 0; i < (long long)(n); i++) {
    int l, r;
    cin >> l >> r;
    arr[l].push_back(r);
  }
  for (auto i = 1; i <= (long long)(1e6); i++)
    if (((int)((arr[i]).size()))) sort(((arr[i]).begin()), ((arr[i]).end()));
  build(1, 0, N - 5);
  while (q--) {
    int x;
    cin >> x;
    vector<int> vec(x + 1);
    for (auto i = 1; i <= (long long)(x); i++) cin >> vec[i];
    long long sum = 0;
    for (auto i = 1; i <= (long long)(x); i++)
      sum += query(1, 0, N - 5, vec[i - 1] + 1, vec[i], vec[i]);
    cout << sum << '\n';
  }
  return 0;
}
