#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll N = 1e5 + 7;
vector<ll> tree[4*N];
ll n;
void build(ll node, ll l, ll r, vector<ll> &arr) {
if (l == r) {
tree[node] = {arr[l]};
return;
}
ll mid = l + (r - l) / 2;
build(node*2, l, mid, arr);
build(node*2+1, mid+1, r, arr);
tree[node].resize(tree[node*2].size() + tree[node*2+1].size());
merge(tree[node*2].begin(), tree[node*2].end(),
tree[node*2+1].begin(), tree[node*2+1].end(),
tree[node].begin());
}
ll query(ll node, ll l, ll r, ll ql, ll qr, ll low, ll high) {
if (qr < l || ql > r) return 0;
if (ql <= l && r <= qr) {
return upper_bound(tree[node].begin(), tree[node].end(), high) -
lower_bound(tree[node].begin(), tree[node].end(), low);
}
ll mid = l + (r - l) / 2;
return query(node*2, l, mid, ql, qr, low, high) +
query(node*2+1, mid+1, r, ql, qr, low, high);
}
bool valid(ll i, ll j, ll mn, ll mx) {
ll cnt = query(1, 1, n, i, j, mn, mx);
return cnt == 0;
}
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--) {
cin >> n;
vector<ll> arr(n + 1);
for (ll i = 1; i <= n; i++) cin >> arr[i];
build(1, 1, n, arr);
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";
}
}