#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
struct node {
  int l, r;
  int id;
  bool operator<(const node& a) const {
    if (l != a.l) return l > a.l;
    if (r != a.r) return r < a.r;
    return id < a.id;
  }
} a[maxn];
int res[maxn];
int c[maxn];
inline int lowbit(int i) { return i & (-i); }
void add(int i) {
  while (i <= maxn) {
    c[i]++;
    i += lowbit(i);
  }
}
int query(int i) {
  int ret = 0;
  while (i > 0) {
    ret += c[i];
    i -= lowbit(i);
  }
  return ret;
}
int main() {
  int n, m;
  cin >> n >> m;
  int tot = 0;
  for (int i = 0; i < (n); ++i) {
    scanf("%d%d", &a[tot].l, &a[tot].r);
    a[tot++].id = 0;
  }
  int cnt, now, pre;
  for (int i = (1); i <= (m); ++i) {
    scanf("%d", &cnt);
    pre = 0;
    res[i] = n;
    for (int j = 0; j < (cnt); ++j) {
      scanf("%d", &now);
      a[tot].l = pre + 1;
      a[tot].r = now - 1;
      if (a[tot].l <= a[tot].r) a[tot++].id = i;
      pre = now;
    }
    a[tot].l = pre + 1;
    a[tot].r = maxn;
    a[tot++].id = i;
  }
  sort(a, a + tot);
  memset(c, 0, sizeof(c));
  for (int i = 0; i < (tot); ++i) {
    if (a[i].id)
      res[a[i].id] -= query(a[i].r);
    else
      add(a[i].r);
  }
  for (int i = (1); i <= (m); ++i) printf("%d\n", res[i]);
  return 0;
}
