#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll Log = 22, N = 1e5 + 7;
ll Min[N][Log], Max[N][Log];
void sparse(vector<ll> &arr, ll n) {
for (int i = 1; i <= n; i++) Min[i][0] = Max[i][0] = arr[i];
ll sz = 32 - __builtin_clz(n);
for (int j = 1; j < sz; j++) {
for (int i = 1; i + (1 << j) - 1 <= n; i++) {
Min[i][j] = min (Min[i][j - 1], Min[i + (1<<(j - 1))][j - 1]);
Max[i][j] = max (Max[i][j - 1], Max[i + (1<<(j - 1))][j - 1]);
}
}
}
pair<ll,ll> query(ll L, ll R) {
ll j = 31 - __builtin_clz(R - L + 1);
ll mn = min(Min[L][j], Min[R - (1<<j) + 1][j]);
ll mx = max(Max[L][j], Max[R - (1<<j) + 1][j]);
return {mn, mx};
}
bool valid(ll i, ll j, ll mn, ll mx) {
pair<ll,ll> tmp = query(i, j);
if (tmp.first >= mx || tmp.second <= mn) return true;
return false;
}
bool check(vector<ll> &arr, ll i, ll j, ll mn, ll mx) {
bool ok = true;
while (i < j) {
if (valid(i + 1, j, min(mn, arr[i]), max(mx, arr[i]))) {
mn = min (mn, arr[i]);
mx = max (mx, arr[i]);
i++;
}
else if(valid(i, j - 1, min(mn, arr[j]), max(mx, arr[j]))) {
mn = min (mn, arr[j]);
mx = max (mx, arr[j]);
j--;
}
else {
ok = false;
break;
}
}
return ok;
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0);
ll t = 1;
cin >> t;
while (t--) {
ll n; cin >> n;
vector<ll> arr(n + 1);
for (int i = 1; i <= n; i++) cin >> arr[i];
sparse(arr, n);
if (check(arr, 2, n, arr[1], arr[1]) || check(arr, 1, n - 1, arr[n], arr[n])) {
cout << "YES\n";
}
else cout << "NO\n";
}
}