#include <iostream>
using namespace std;
int S[1000010];
int T[10010];
int n,m;
//主串,模式串,返回在主串的第几个位置匹配
int kmp(int *S, int *T)
{
int next[10010]; //next[i] 表示当模式串T[i]与主串失配时,模式串的索引回溯到next[i]
int i,j;
//模式串自我匹配,求next值
next[0] = -1;
i = 0;
j = -1;
while(i < m)
{
if(j == -1 || T[i] == T[j])
{
i++;
j++;
//模式串在索引i之前有j个字符与模式串的前j个字符匹配
if(T[i] != T[j])
{
next[i] = j;
}
else
{
next[i] = next[j];
}
}
else
{
j = next[j]; //不匹配时,模式串索引回溯
}
}
//模式串与主串匹配
i = j = 0;
while(i < n)
{
if(j == -1 || S[i] == T[j])
{
i++;
j++;
}
else
{
j = next[j]; //不匹配时,模式串索引回溯
}
//找到一个匹配
if(j == m)
{
return i-m+1;
}
}
return -1;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=0; i<n; i++)
{
cin>>S[i];
}
for(int i=0; i<m; i++)
{
cin>>T[i];
}
cout<<kmp(S,T)<<endl;
}
return 0;
}