#include <iostream>
#include <string>
using namespace std;
//图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。
//每位借书的读者手中有一个需求码,这个需求码也是一个正整数。
//如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。
//小 D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写一个程序,对于每一位读者,
//求出他所需要的书中图书编码最小的那本书,如果没有他需要的书,请输出 - 1。
//输入的第一行,包含两个正整数 n 和 q,以一个空格分开,分别代表图书馆里书的数量和读者的数量。
//接下来的 n 行,每行包含一个正整数,代表图书馆里某本书的图书编码。
//接下来的 q 行,每行包含两个正整数,以一个空格分开,第一个正整数代表图书馆里读者的需求码的长度,
//第二个正整数代表读者的需求码。
bool judge(string m, string n, int ln, int );
class Library {
public:
Library()
{
length = s.length();
}
string s;
int length;
bool jud = false;
int value=0;
};
void begin(Library *a);
int str2int(string s);
struct vis {
int length=0;
string code;
};
int submit(Library a[]);
int n , q ;
int main()
{
cin >> n >> q;
Library* a = new class Library[n];
vis* b = new struct vis[q];
for (int i = 0; i < n; i++)
{
cin >> a[i].s;
}
for (int i = 0; i < n; i++)
{
a[i].length = a[i].s.length();
a[i].value = str2int(a[i].s);
}
for (int i = 0; i < q; i++)
{
cin >> b[i].length >> b[i].code;
}
for (int i = 0; i < q; i++)
{
for (int j = 0; j < n; j++)
{
if (judge(a[j].s, b[i].code, b[i].length,a[j].length))
{
a[j].jud = true;
}
}
cout<<submit(a)<<endl;
begin(a);
}
}
bool judge(string m, string n, int ln,int x)
{
for (int i = 0; i < ln; i++)
{
if (m[i] != n[i] )
{
if (x == -1)
{
return false;
}
}
}
return true;
}
int submit(Library a[])
{
int re=0;
int jud = a[0].value;
for (int i = 0; i < n; i++)
{
if (a[i].jud && a[i].value<=jud && a[i].value !=-1 )
{
a[re].value = jud;
jud = a[i].value;
re = i;
a[i].value = -1;
}
}
return jud;
}
void begin(Library* a)
{
for (int i = 0; i < n; i++)
{
a[i].jud = false;
}
}
int str2int(string s,int n)
{
int temp = 0;
for (int i = 0; i < n; i++)
{
temp = temp * 10 + s[i] - '0';
}
return temp;
}