#include <iostream>
#include <cstdio>
//#include <string>
#include <vector>
using namespace std;
vector<int> a;
vector<int> b;
int next(int *b,int k)
{
int i=1;
int j=2;
int n=0;
while(j<k)
{
if(b[i]==b[j])
{
++n;
++i;
++j;
}
else
{
++j;
i=1;
n=0;
}
}
return n;
// for(int i=1;i<k;++i){
// for(int j=2;j<k;++i){
// }
// }
}
int main()
{
// int next[6]= {-1,0,1,1,0,2};//next和nextal
int fre;
int m;
int n;
// char ge;
scanf("%d",&fre);
// scanf("%c",&ge);
for(int i=0; i<fre; ++i)
{
scanf("%d %d",&m,&n);
// int a[m+1];//这样不行
// int b[n+1];
for(int j=1; j<=m; ++j)
{
scanf("%d",&a[j]);
}
for(int k=1; k<=n; ++k)
{
scanf("%d",&b[k]);
}
int j=1;
int k=1;
while(j<=m&&k<=n)//这个用while,不用for
{
if(a[j]==b[k])//相等就一次往后加
{
++j;
++k;
}
else//不相等,让k跳到数组哪里,j先不动
{
k=next(b,k);
if(k==0)//如果在模式串第一个字母就不对,那么两个都往后+1,这个时候,k=0,正好+1,变成了1
{
++j;
++k;
}
}
}
//成功出来之后,k=n+1,并且a[j-1]==b[k-1]
if(k==n+1&&a[j-1]==b[k-1]) //你就要想好,匹配上的条件是什么!
{
printf("%d\n",j-n);//这种最难确定了,一会再改
}
else
{
// printf("%d\n",j);
// printf("%d\n",n);
printf("-1");
}
// for(int j=0;j<m;++j){
// for(int k=0;k<n;++k){
// }
// }
// for(int k=0;k<n;++k){
// printf("%d ",b[k]);
// }
}
}