#include <bits/stdc++.h>   using namespace std;   template <class T>   void _R(T &x) {     cin >> x;   }   void _R(int &x) { scanf( %d , &x); }   void _R(int64_t &x) { scanf( %lld , &x); }   void _R(double &x) { scanf( %lf , &x); }   void _R(char &x) { scanf(  %c , &x); }   void _R(char *x) { scanf( %s , x); }   void R() {}   template <class T, class... U>   void R(T &head, U &...tail) {     _R(head);     R(tail...);   }   template <class T>   void _W(const T &x) {     cout << x;   }   void _W(const int &x) { printf( %d , x); }   void _W(const int64_t &x) { printf( %lld , x); }   void _W(const double &x) { printf( %.16f , x); }   void _W(const char &x) { putchar(x); }   void _W(const char *x) { printf( %s , x); }   template <class T, class U>   void _W(const pair<T, U> &x) {     _W(x.first);     putchar(   );     _W(x.second);   }   template <class T>   void _W(const vector<T> &x) {     for (auto i = x.begin(); i != x.end(); _W(*i++))       if (i != x.cbegin()) putchar(   );   }   void W() {}   template <class T, class... U>   void W(const T &head, const U &...tail) {     _W(head);     putchar(sizeof...(tail) ?     :   n );     W(tail...);   }   int MOD = 1e9 + 7;   void ADD(long long &x, long long v) {     x = (x + v) % MOD;     if (x < 0) x += MOD;   }   const int SIZE = 1 << 20;   vector<int> pos[SIZE];   int new_id[SIZE];   int a[SIZE];   int dp[SIZE];   void solve() {     int n;     R(n);     vector<int> d;     for (int i = 0; i < (n); ++i) {       R(a[i]);       d.emplace_back(a[i]);     }     for (int i = 0; i < (n); ++i) pos[i].clear();     (sort(d.begin(), d.end()),      d.resize(distance(d.begin(), unique(d.begin(), d.end()))));     for (int i = 0; i < (n); ++i)       a[i] = (lower_bound(d.begin(), d.end(), a[i]) - d.begin());     int an = 0;     for (int i = 0; i < (n); ++i) {       pos[a[i]].emplace_back(i);     }     int it = 0;     for (int i = 0; i < (((int)(d).size())); ++i) {       an = max(an, ((int)(pos[i]).size()));       for (int v : pos[i]) new_id[it++] = v;     }     for (int i = n - 1; i >= 0; i--) {       dp[i] = 1;       if (i + 1 < n && new_id[i] < new_id[i + 1]) dp[i] += dp[i + 1];     }     for (int i = 0; i < (n); ++i) {       int base = dp[i];       int added = 0;       if (i && a[new_id[i]] != a[new_id[i - 1]]) {         added += lower_bound((pos[a[new_id[i - 1]]]).begin(),                              (pos[a[new_id[i - 1]]]).end(), new_id[i]) -                  pos[a[new_id[i - 1]]].begin();       }       if (i + base < n && a[new_id[i + base]] != a[new_id[i + base - 1]]) {         added +=             pos[a[new_id[i + base]]].end() -             upper_bound((pos[a[new_id[i + base]]]).begin(),                         (pos[a[new_id[i + base]]]).end(), new_id[i + base - 1]);       }       an = max(an, base + added);     }     for (int i = (1); i < (((int)(d).size())); ++i) {       for (int j = 0; j < (((int)(pos[i]).size())); ++j) {         an = max(an, ((int)(pos[i]).size()) - j +                          (int)(lower_bound((pos[i - 1]).begin(),                                            (pos[i - 1]).end(), pos[i][j]) -                                pos[i - 1].begin()));       }     }     W(n - an);   }   int main() {     int ___T;     scanf( %d , &___T);     for (int cs = 1; cs <= ___T; cs++) {       solve();     }     return 0;   }