#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]);
//         }
    }
}