#include #include #include #include #include #include #include #include //#include #define ll long long #define ull unsigned long long #define ui unsigned int #define d double //#define ld long double using namespace std; const int maxn=1000233,inf=1002333333; int a[maxn],b[maxn],f[maxn],g[maxn]; int i,j,k,n,m; int ra,fh;char rx; inline int read(){ rx=getchar(),ra=0,fh=1; while((rx<'0'||rx>'9')&&rx!='-')rx=getchar(); if(rx=='-')fh=-1,rx=getchar(); while(rx>='0'&&rx<='9')ra=ra*10+rx-48,rx=getchar();return ra*fh; } inline void maxs(int &a,int b){if(b>a)a=b;} int main(){ memset(f,200,sizeof(f)),memset(g,200,sizeof(g));register int i; for(int T=read();T;T--){ for(i=1;i<=n;i++)f[a[i]]=-inf; for(i=1;i<=m;i++)g[b[i]]=-inf; n=read(),m=read(); for(i=1;i<=n;i++)a[i]=read(),maxs(f[a[i]],1),maxs(f[a[i]],f[a[i]-1]+1); for(i=1;i<=m;i++)b[i]=read(),maxs(g[b[i]],1),maxs(g[b[i]],g[b[i]-1]+1); int ans=0; for(i=1;i<=n;i++)maxs(ans,min(f[a[i]],g[a[i]])); for(i=1;i<=m;i++)maxs(ans,min(f[b[i]],g[b[i]])); printf("%d\n",ans); } return 0; }