#include <bits/stdc++.h>
using namespace std;
int getint() {
  int x;
  scanf("%d", &x);
  return x;
}
const int MAX_V = 1000005;
vector<int> t[(MAX_V + 5) * 4];
vector<int> a[(MAX_V + 5)];
void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[v] = a[tl];
  } else {
    int tm = (tl + tr) / 2;
    build(v * 2 + 1, tl, tm);
    build(v * 2 + 2, tm + 1, tr);
    merge(t[v * 2 + 1].begin(), t[v * 2 + 1].end(), t[v * 2 + 2].begin(),
          t[v * 2 + 2].end(), back_inserter(t[v]));
  }
}
int myBinSearch(vector<int>& a, int x) {
  int l = -1, r = a.size();
  while (r - l > 1) {
    int mid = (l + r) / 2;
    if (a[mid] > x)
      r = mid;
    else
      l = mid;
  }
  return l + 1;
}
int get_cnt(int v, int tl, int tr, int l, int r, int x) {
  if (tl == l && tr == r) {
    return myBinSearch(t[v], x);
  }
  int tm = (tl + tr) / 2;
  if (r <= tm)
    return get_cnt(v * 2 + 1, tl, tm, l, r, x);
  else if (l > tm)
    return get_cnt(v * 2 + 2, tm + 1, tr, l, r, x);
  else
    return get_cnt(v * 2 + 1, tl, tm, l, tm, x) +
           get_cnt(v * 2 + 2, tm + 1, tr, tm + 1, r, x);
}
int que(int l, int r, int ll, int rr) {
  int res = get_cnt(0, 0, MAX_V, l, r, rr) - get_cnt(0, 0, MAX_V, l, r, ll - 1);
  return res;
}
int main() {
  int n = getint();
  int m = getint();
  for (int i = 0; i < n; i++) {
    int x = getint();
    int y = getint();
    a[x].push_back(y);
  }
  for (int i = 0; i < MAX_V; i++) sort(a[i].begin(), a[i].end());
  build(0, 0, MAX_V);
  while (m--) {
    int cnt = getint();
    int prv = 0;
    int ans = 0;
    while (cnt--) {
      int p = getint();
      ans += que(prv + 1, p, p, MAX_V);
      prv = p;
    }
    printf("%d\n", ans);
  }
  return 0;
}
