#include <bits/stdc++.h>
#define LL long long
#define PII pair<int,int>
#define PIL pair<int,LL>
#define PLI pair<LL,int>
#define PIII pair<int,PII>
#define PLL pair<LL,LL>
#define PLII pair<LL,PII>
#define VI vector<int>
#define VVI vector<VI>
#define VL vector<LL>
#define VVL vector<VL>
#define VPII vector<PII>
#define FF first
#define SS second
#define MP make_pair
#define PB push_back
#define sqr(x) ((x) * (x))
#define all(x) x.begin(),x.end()
#define watch(x) cout<<(#x)<<" = "<<(x)<<'\n'
#define mset(a,v) memset(a,v,sizeof(a))
#define setp(x) cout<<fixed<<setprecision(x)
#define EPS 0.00000000001
#define PI acos(-1)
#define loop(i,b,n) for(int i=b;i<n;++i)
#define rev_loop(i,b,n) for(int i=b;i>=n;--i)
using namespace std;
 
const int MOD = 1e9 + 7;
const LL MX = 1e9;
const LL INF = 1e9;
 
void solve()
{
    int n,m;
    cin>>n>>m;
    int N = n+m+1, a[N];
    loop(i,0,n) cin>>a[i];
    a[n] = INF;
    loop(i,n+1,N) cin>>a[i];
 
    VI z(N,0);
    LL ps[n+1] = {0};
 
    for (int i = 1, l = 0, r = 0; i < N; ++i)
    {
        if (i <= r) z[i] = min (r - i + 1, z[i - l]);
        while (i + z[i] < N && a[z[i]] == a[i + z[i]]) ++z[i];
        if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
 
        if(i > n) ++ps[z[i]];
    }
 
    LL mx = -1, mxl = 0;
    rev_loop(i,n,1)
    {
        LL len = i;
        if(i != n) ps[i] += ps[i+1];
        if(mx < (i * ps[i])) {mx = (i * ps[i]); mxl = i;}
    }
 
    cout<<mxl<<'\n';
}
 
int main()
{
    //ofstream out("output.txt");
    //ifstream in("input.txt");
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 
    int t;
    cin>>t;
 
    while(t--)
    {
        solve();
    }
 
    return 0;
}