#include #include #define N_MAX 100000 #define A_MAX 1000000 int T, m, n, i, a[N_MAX + 1], b[N_MAX + 1], p[A_MAX + 1], q[A_MAX + 1], u[N_MAX + 1], v[N_MAX + 1], f[N_MAX + 1], g[N_MAX + 1], ans; int main() { scanf("%d", &T); while (T--) { scanf("%d %d", &m, &n); for (i = 1; i <= m; ++i) scanf("%d", &a[i]); for (i = 1; i <= n; ++i) scanf("%d", &b[i]); for (i = m; i; --i) u[i] = p[a[i] + 1], p[a[i]] = i; for (i = 1; i <= m; ++i) p[a[i]] = 0; for (i = n; i; --i) v[i] = q[b[i] + 1], q[b[i]] = i; for (i = 1; i <= n; ++i) q[b[i]] = 0; for (i = 1; i <= m; ++i) { ++f[i]; p[a[i]] = std::max(p[a[i]], f[i]); if (u[i]) f[u[i]] = std::max(f[u[i]], f[i]); } for (i = 1; i <= n; ++i) { ++g[i]; q[b[i]] = std::max(q[b[i]], g[i]); if (v[i]) g[v[i]] = std::max(g[v[i]], g[i]); } ans = 0; for (i = 1; i <= m; ++i) ans = std::max(ans, std::min(p[a[i]], q[a[i]])); printf("%d\n", ans); for (i = 1; i <= m; ++i) p[a[i]] = f[i] = 0; for (i = 1; i <= n; ++i) q[b[i]] = g[i] = 0; } return 0; }