#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while(T--){
int n;
ll k;
cin >> n >> k;
vector<ll> a(n+1), S(n+1,0);
for(int i=1;i<=n;i++){
cin >> a[i];
S[i] = S[i-1] + (a[i] <= k);
}
// Prefix-good: P[i] = true if [1..i] has median ≤ k
vector<char> P(n+1, 0);
for(int i=1;i<=n;i++){
int m = i;
ll cnt = S[i];
// need cnt ≥ ceil(m/2)
if (2*cnt >= m + (m&1))
P[i] = 1;
}
// Suffix-good: Q[i] = true if [i..n] has median ≤ k
// we'll use Q[r+1]
vector<char> Q(n+2, 0);
for(int i=n;i>=1;i--){
int m = n - i + 1;
ll cnt = S[n] - S[i-1];
if (2*cnt >= m + (m&1))
Q[i] = 1;
}
// Build D_even[i] = 2*S[i] - i
// D_odd [i] = 2*S[i] - i - 1
vector<ll> De(n+1), Do(n+1);
for(int i=1;i<=n;i++){
De[i] = 2*S[i] - i;
Do[i] = 2*S[i] - i - 1;
}
// Build suffix‐max for middle‐good checks, split by parity
// for r in [i..n-1], parity = r%2
vector<array<ll,2>> sufMaxE(n+2, {LLONG_MIN,LLONG_MIN});
vector<array<ll,2>> sufMaxO(n+2, {LLONG_MIN,LLONG_MIN});
for(int i=n-1;i>=1;i--){
sufMaxE[i] = sufMaxE[i+1];
sufMaxO[i] = sufMaxO[i+1];
int p = i&1;
sufMaxE[i][p] = max(sufMaxE[i][p], De[i]);
sufMaxO[i][p] = max(sufMaxO[i][p], Do[i]);
}
// Build prefix‐min for the other middle‐good check
vector<array<ll,2>> preMinE(n+1, {LLONG_MAX,LLONG_MAX});
vector<array<ll,2>> preMinO(n+1, {LLONG_MAX,LLONG_MAX});
for(int i=1;i<=n-1;i++){
preMinE[i] = preMinE[i-1];
preMinO[i] = preMinO[i-1];
int p = i&1;
preMinE[i][p] = min(preMinE[i][p], De[i]);
preMinO[i][p] = min(preMinO[i][p], Do[i]);
}
bool ok = false;
// Case 1: prefix & middle
// find ℓ in [1..n-2] with P[ℓ]
// and some r>ℓ with middle‐good:
// either (r-ℓ even) & De[r] ≥ De[ℓ]
// or (r-ℓ odd ) & Do[r] ≥ Do[ℓ]
for(int l=1;l<=n-2 && !ok;l++){
if(!P[l]) continue;
int p = l&1;
// even‐length mid: r%2==p
if(sufMaxE[l+1][p] >= De[l]){
ok = true;
break;
}
// odd‐length mid: r%2!=p
if(sufMaxO[l+1][p^1] >= Do[l]){
ok = true;
break;
}
}
// Case 2: middle & suffix
// find r in [2..n-1] with Q[r+1]
// and some ℓ< r with middle‐good:
// either (r-ℓ even) & De[r] ≥ De[ℓ]
// or (r-ℓ odd ) & Do[r] ≥ Do[ℓ]
for(int r=2;r<=n-1 && !ok;r++){
if(!Q[r+1]) continue;
int p = r&1;
// even‐length mid: ℓ%2==p
if(preMinE[r-1][p] <= De[r]){
ok = true;
break;
}
// odd‐length mid: ℓ%2!=p
if(preMinO[r-1][p^1] <= Do[r]){
ok = true;
break;
}
}
// Case 3: prefix & suffix
// any ℓ<r with P[ℓ] and Q[r+1]
int seenP = 0;
for(int r=2;r<=n-1 && !ok;r++){
if(P[r-1]) seenP = 1;
if(seenP && Q[r+1]){
ok = true;
break;
}
}
cout << (ok ? "YES\n" : "NO\n");
}
return 0;
}