#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void maximize(T& a, const T& b) {
if (a < b) a = b;
}
const int N = 15e2 + 5;
int n, m;
int a[N], b[N];
int dp[N][N]; // dp[i][j] = Độ dài dãy con chung bội hai dài nhất của a[1..i] và b[1..j] và b[j] chắc chắn được chọn
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= m; i++) cin >> b[i];
memset(dp, 0, sizeof dp);
// O(n * m^2)
// for (int i = 1; i <= n; i++) {
// for (int j = 1; j <= m; j++) {
// // b[j] không bắt cặp với a[i]
// dp[i][j] = dp[i - 1][j];
// // b[j] bắt cặp với a[i]
// if (b[j] == a[i]) {
// dp[i][j] = 1;
// for (int prev_j = 1; prev_j < j; prev_j++) {
// if (2 * b[prev_j] <= b[j]) {
// maximize(dp[i][j], dp[i - 1][prev_j] + 1);
// }
// }
// }
// }
// }
// O(n * m)
for (int i = 1; i <= n; i++) {
int opt_j = -1;
for (int j = 1; j <= m; j++) {
// b[j] không bắt cặp với a[i]
dp[i][j] = dp[i - 1][j];
// b[j] bắt cặp với a[i]
if (b[j] == a[i]) {
dp[i][j] = 1;
if (opt_j != -1) maximize(dp[i][j], dp[i - 1][opt_j] + 1);
}
// cập nhật điểm j' tối ưu
if (2 * b[j] <= a[i]) {
if (opt_j == -1 || dp[i - 1][opt_j] < dp[i - 1][j]) opt_j = j;
}
}
}
int ans = 0;
for (int j = 1; j <= m; j++) {
maximize(ans, dp[n][j]);
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin >> T;
while (T--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtYXhpbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYSA8IGIpIGEgPSBiOyAgCn0KCmNvbnN0IGludCBOID0gMTVlMiArIDU7IAoKaW50IG4sIG07IAppbnQgYVtOXSwgYltOXTsgCgppbnQgZHBbTl1bTl07IC8vIGRwW2ldW2pdID0gxJDhu5kgZMOgaSBkw6N5IGNvbiBjaHVuZyBi4buZaSBoYWkgZMOgaSBuaOG6pXQgY+G7p2EgYVsxLi5pXSB2w6AgYlsxLi5qXSB2w6AgYltqXSBjaOG6r2MgY2jhuq9uIMSRxrDhu6NjIGNo4buNbiAKCnZvaWQgc29sdmUoKSB7CgljaW4gPj4gbiA+PiBtOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSBjaW4gPj4gYltpXTsgCgoJbWVtc2V0KGRwLCAwLCBzaXplb2YgZHApOyAgCgkKCS8vIE8obiAqIG1eMikKCS8vIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJLy8gCWZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykgewoJLy8gCQkvLyBiW2pdIGtow7RuZyBi4bqvdCBj4bq3cCB24bubaSBhW2ldCgkvLyAJCWRwW2ldW2pdID0gZHBbaSAtIDFdW2pdOyAKCgkvLyAJCS8vIGJbal0gYuG6r3QgY+G6t3AgduG7m2kgYVtpXQoJLy8gCQlpZiAoYltqXSA9PSBhW2ldKSB7CgkvLyAJCQlkcFtpXVtqXSA9IDE7ICAKCS8vIAkJCWZvciAoaW50IHByZXZfaiA9IDE7IHByZXZfaiA8IGo7IHByZXZfaisrKSB7CgkvLyAJCQkJaWYgKDIgKiBiW3ByZXZfal0gPD0gYltqXSkgewoJLy8gCQkJCQltYXhpbWl6ZShkcFtpXVtqXSwgZHBbaSAtIDFdW3ByZXZfal0gKyAxKTsgCgkvLyAJCQkJfQoJLy8gCQkJfQoJLy8gCQl9CgkvLyAJfQoJLy8gfQoKCS8vIE8obiAqIG0pCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlpbnQgb3B0X2ogPSAtMTsgICAKCgkJZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKSB7CgkJCS8vIGJbal0ga2jDtG5nIGLhuq90IGPhurdwIHbhu5tpIGFbaV0KCQkJZHBbaV1bal0gPSBkcFtpIC0gMV1bal07IAoKCQkJLy8gYltqXSBi4bqvdCBj4bq3cCB24bubaSBhW2ldCgkJCWlmIChiW2pdID09IGFbaV0pIHsKCQkJCWRwW2ldW2pdID0gMTsgCgkJCQlpZiAob3B0X2ogIT0gLTEpIG1heGltaXplKGRwW2ldW2pdLCBkcFtpIC0gMV1bb3B0X2pdICsgMSk7IAoJCQl9CgoJCQkvLyBj4bqtcCBuaOG6rXQgxJFp4buDbSBqJyB04buRaSDGsHUKCQkJaWYgKDIgKiBiW2pdIDw9IGFbaV0pIHsKCQkJCWlmIChvcHRfaiA9PSAtMSB8fCBkcFtpIC0gMV1bb3B0X2pdIDwgZHBbaSAtIDFdW2pdKSBvcHRfaiA9IGo7IAoJCQl9CgkJfQoJfQoKCWludCBhbnMgPSAwOyAgIAoJZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKSB7CgkJbWF4aW1pemUoYW5zLCBkcFtuXVtqXSk7IAoJfQoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCglpbnQgVDsgY2luID4+IFQ7ICAKCgl3aGlsZSAoVC0tKSB7CgkJc29sdmUoKTsgIAoJfQp9Cg==