#define ll int
#define f first
#define s second
struct info{
    pair<ll,ll> next[2];
    info(){
        next[0]=next[1]={-1,0};
    }
};
vector<info> dp;
ll sum_n=0;
class Solution {
  public:
    int solve(int N, vector<int> A) {
        vector<ll> ans(N,0);
        sum_n+=N;
        assert(sum_n<=((ll)(5e5)));
        dp.clear();
        dp.emplace_back();
        for(ll i=0;i<N;i++){
            ll best=1,cur=0;
            for(ll j=30;j>=0;j--){
                ll d=min(1,A[i]&(1<<j));
                if(d){
                    best=max(best,dp[cur].next[0].s+1);
                    if(dp[cur].next[1].f==-1){
                        dp[cur].next[1].f=dp.size();
                        dp.emplace_back();
                    }
                    cur=dp[cur].next[1].f;
                }
                else{
                    dp[cur].next[0].s=max(dp[cur].next[0].s,best);
                    if(dp[cur].next[0].f==-1){
                        dp[cur].next[0].f=dp.size();
                        dp.emplace_back();
                    }
                    cur=dp[cur].next[0].f;
                }
            }
            ans[i]=best;
        }
        dp.clear();
        dp.emplace_back();
        ll final=N;
        for(ll i=N-1;i>=0;i--){
            ll best=1,cur=0;
            for(ll j=30;j>=0;j--){
                ll d=min(1,A[i]&(1<<j));
                if(d){
                    dp[cur].next[1].s=max(dp[cur].next[1].s,best);
                    if(dp[cur].next[1].f==-1){
                        dp[cur].next[1].f=dp.size();
                        dp.emplace_back();
                    }
                    cur=dp[cur].next[1].f;
                }
                else{
                    best=max(best,dp[cur].next[1].s+1);
                    if(dp[cur].next[0].f==-1){
                        dp[cur].next[0].f=dp.size();
                        dp.emplace_back();
                    }
                    cur=dp[cur].next[0].f;
                }
            }
            ans[i]+=best;
            ans[i]=N-ans[i];
            final=min(final,ans[i]+1);
        }
        return final;
    }
};