#include <iostream>
#define inff 100000
#include <cmath>
using namespace std;

void readArray( long& n, long long arr[ ] ){
cin >> n;

for ( int i = 0; i < n; i ++ ){
    cin >> arr[i];
}

}

void createAuxiliarArray( long n, long long arr[ ], long aux[ ] ){
for ( int i = 0; i < n; i ++ ){
    aux[i] = i;
}
}

void mergeSort ( long left, long mid, long right, long long arr[ ], long aux[ ] ){

    long i = left;
    long j = mid+1;

    long long vect[right-left+1];
    long aux1[right-left+1];
    int lengthaux = 0;
    while ( i <= mid && j <= right ){
        if ( arr[i] < arr[j] ){
            vect[lengthaux] = arr[i];
            aux1[lengthaux] = i;
            i ++;
            lengthaux ++;
        } else {
        if ( arr[j] < arr[i] ){
            vect[lengthaux] = arr[j];
            aux1[lengthaux] = j;
            lengthaux ++;
            j ++;
        } else {
        vect[lengthaux] = arr[i];
        aux1[lengthaux] = j;
        i ++;
        j ++;
        lengthaux ++;
        }
        }
    }
while ( i <= mid ){
    vect[lengthaux] = arr[i];
    aux1[lengthaux] = i;
    i ++;
    lengthaux ++;
}

while ( j <= right ){
    vect[lengthaux] = arr[j];
    aux1[lengthaux] = j;
    j ++;
    lengthaux ++;
}
lengthaux --;
for ( int i = right; i >= left; i -- ){
    arr[i] = vect[lengthaux];
    aux[i] = aux1[lengthaux];
    lengthaux --;
}

}

void merging ( long long arr[ ], long aux[ ], long left, long right ){
    if ( left == right ) return;
    long mid = ( left + right )/2;
    merging(arr, aux, left, mid);
    merging( arr, aux, mid+1, right);
    mergeSort(left, mid, right, arr, aux);
}

long long findBest ( long long arr[ ], long n, long aux[ ] ){
long long best = arr[n-1] + arr[n-2] - floor( log2( (double)abs(aux[n-1] - aux[n-2]) ) );
int p = n-2;
while ( p > 1 ){
        long long f = arr[p-1] + arr[p-2] - floor( log2( (double)abs(aux[p-1]- aux[p-2]) ) );
    if ( f > best ){
        best = f;
    }
    p --;
}
return best;
}

int main()
{
    long long arr[inff];
    long aux[inff];
    long n;
    readArray(n, arr);
    createAuxiliarArray(n, arr, aux);
    merging(arr, aux, 0, n-1);
    cout << findBest(arr, n, aux);
    return 0;
}