rt
#include <bits/stdc++.h>
using namespace std;
const int MAX = 5e5 + 50;
inline int read()
{
int x = 0; char ch = getchar();
while (!isdigit(ch)) ch = getchar();
while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch xor 48), ch = getchar();
return x;
}
inline void write (int x)
{
if (x > 9) write(x / 10);
putchar (x % 10 + 48);
}
int m, n;
int tot, root; int sum[MAX << 1], _end[MAX << 1]; int ch[MAX << 1][2]; int ans;
inline int _new() { return (++ tot); }
void insert (int &cur, int s[], int now, int len)
{
if (!cur) cur = _new();
++ sum[cur];
if (now == len) return (void)(++ _end[cur]);
insert(ch[cur][s[now + 1]], s, now + 1, len);
}
void query (int cur, int s[], int now, int len)
{
ans += _end[cur];
if (now == len) return (void)(ans -= _end[cur], ans += sum[cur]);
if (ch[cur][s[now + 1]] == 0) return;
query(ch[cur][s[now + 1]], s, now + 1, len);
}
inline void output() { write(ans), putchar('\n'); }
inline void work()
{
m = read(), n = read();
for (register int i = 1; i <= m; ++ i)
{
int len = read(); int s[MAX];
for (register int i = 1; i <= len; ++ i) cin >> s[i];
insert (root, s, 0, len);
}
for (register int i = 1; i <= n; ++ i)
{
ans = 0;
int len = read(); int s[MAX];
for (register int i = 1; i <= len; ++ i) cin >> s[i];
query (root, s, 0, len);
output();
}
}
int main()
{
work();
return 0;
}