#include <stdio.h>
#include <string>
#define min(a,b) ((a<b)?a:b)
#define N 10005
long n,m,i,j,t,x,pmin,pmax,P2,lg[N],l[N],ind[N],ind2[N],v[N],rm[16][N];
char ch[2048],*a[10005];
long rmq(long x,long y){
return min( rm[ lg[y-x+1] ] [x], rm[ lg[y-x+1] ] [y-(1<<(lg[y-x+1]))+1] );
}
long asemenea(int x, int y){
int i,K=min(l[x],l[y]);
for (i=0;i<K;++i)if (a[x][i]!=a[y][i])break;
return i;
}
int comp(const void * n1, const void * n2){
return strcmp(a[*((long*)n1)],a[*((long*)n2)]);
}
int main(){
freopen("ratina.in","r",stdin);
freopen("ratina.out","w",stdout);
scanf("%ld %ld\n",&n,&m);
for (i=1;i<=n;++i){
scanf("%s\n",ch); l[i]=strlen(ch);
ind[i]=i;
a[i]=new char [l[i]+1]; strcpy(a[i],ch);
}
qsort(ind+1,n,sizeof(long),comp);
for (i=1;i<=n;++i)ind2[ind[i]]=i;
for (i=1;i<n;++i)v[i]=asemenea(ind[i],ind[i+1]);
//preprocesare
n--;
for (i=1;i<=n;++i)
rm[0][i]=v[i]; //initializare pt 2^0
for (i=2;i<=n;++i)
lg[i]=lg[i>>1]+1; //vector de logaritmi
while ((long)(1<<P2+1)<=n)P2++; //cea mai mare putere a lui 2 mai mica decat n
for (j=n;j;j--)
for (i=1 ; i<=P2 && j+(1<<i)<=n+1 ; i++)
rm[i][j]=min(rm[i-1][j],rm[i-1][j+(1<<(i-1))]);
//query
for (;m;--m){
scanf("%ld",&t);
pmin=n+2;pmax=0;
for (;t;--t){
scanf("%ld",&x);
if (ind2[x]>pmax)pmax=ind2[x];
if (ind2[x]<pmin)pmin=ind2[x];
}
if (pmax!=pmin)printf("%ld\n",rmq(pmin,pmax-1));
else printf("%ld\n",l[x]);
}
return 0;
}