#include #include #include #include #include #include using namespace std; typedef long long LL; typedef vector VI; #define REP(i,n) for(int i=0, i##_len=(n); i inline void amin(T &a, const T &b) { if (b inline void amax(T &a, const T &b) { if (a struct RangeTree { int m; vector > data; RangeTree(){} RangeTree(const vector&val) { int n = val.size(); m = 1; for (;m >(m*2); for (int i=0; i(data[2*i].size()+data[2*i+1].size()); merge(data[2*i].begin(), data[2*i].end(), data[2*i+1].begin(), data[2*i+1].end(), data[i].begin()); } } // #[i | lo<=val(i) A[300011]; int P[300011]; const int INF = 1<<29; void MAIN() { REP (i, N) { scanf("%d%d", L+i, R+i); A[i] = make_pair(R[i], L[i]); } sort(A, A+N); REP (i, N) S[i] = A[i].second; RangeTree X(VI(S, S+N)); REP ($, M) { int K; scanf("%d", &K); REP (i, K) scanf("%d", P+i); P[K] = INF; int ans = 0; int l, r; l = lower_bound(A, A+N, make_pair(P[0], -1)) - A; REP (i, K) { r = lower_bound(A+l, A+N, make_pair(P[i+1], -1)) - A; if (l < r) ans += X.count(l, r, 0, P[i]+1); l = r; } printf("%d\n", ans); } } int main() { while (scanf("%d%d", &N, &M) != EOF) MAIN(); return 0; }