Ridhiman challenged Ashish to find the maximum valued subsequence of an array a of size n consisting of positive integers. 

The value of a non-empty subsequence of k elements of a is defined as ∑ 2^i over all integers i ≥ 0 such that at least max(1, k - 2) elements of the subsequence have the i-th bit set in their binary representation (value x has the i-th bit set in its binary representation if ⌊ (x)/(2^i) ⌋ mod 2 is equal to 1). 

Recall that b is a subsequence of a, if b can be obtained by deleting some(possibly zero) elements from a.

Help Ashish find the maximum value he can get by choosing some subsequence of a.

Input

The first line of the input consists of a single integer n (1 ≤ n ≤ 500) — the size of a.

The next line consists of n space-separated integers — the elements of the array (1 ≤ a_i ≤ 10^{18}).

Output

Print a single integer — the maximum value Ashish can get by choosing some subsequence of a.

Examples

Input


3
2 1 3


Output


3

Input


3
3 1 4


Output


7

Input


1
1


Output


1

Input


4
7 7 1 1


Output


7

Note

For the first test case, Ashish can pick the subsequence \{{2, 3}\} of size 2. The binary representation of 2 is 10 and that of 3 is 11. Since max(k - 2, 1) is equal to 1, the value of the subsequence is 2^0 + 2^1 (both 2 and 3 have 1-st bit set in their binary representation and 3 has 0-th bit set in its binary representation). Note that he could also pick the subsequence \{{3\}} or \{{2, 1, 3\}}.

For the second test case, Ashish can pick the subsequence \{{3, 4\}} with value 7.

For the third test case, Ashish can pick the subsequence \{{1\}} with value 1.

For the fourth test case, Ashish can pick the subsequence \{{7, 7\}} with value 7.
import java.util.Scanner;


public class A {
    private static Scanner scanner=new Scanner(System.in);
    static int t=1;

    public static void main(String[] args) {
        //scanner.nextLine();
        for(int tt=0;tt<t;tt++) {
            //System.out.print("Case #"+(int)(tt+1)+": ");
            int n= scanner.nextInt();
            long a[]=new long[n];long ans=0;
            for(int i=0;i<n;i++)a[i]= scanner.nextLong();
            if(n<3)
            {
                if(n==1) {System.out.println(a[0]);continue;}
                if(n==2) {
                    System.out.println(a[0]|a[1]);continue;}
            }
            for(int i=0;i<n-2;i++)
            {
                for(int j=i+1;j<n-1;j++) {
                    for (int k = j + 1; k < n; k++) {
                        ans = Math.max(ans, ((a[i] | a[j]) | a[k]));
                    }
                }
            }
            System.out.println(ans);


        }
    }




    public static void print(int a[],int n) {
        for (int i = 0; i < n; i++) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }

    static int LowerBound(int a[], int x) {
        int l=-1,r=a.length;
        while(l+1<r) {
            int m=(l+r)>>>1;
            if(a[m]>=x) r=m;
            else l=m;
        }
        return r;
    }
    static int UpperBound(int a[], int x) {// x is the key or target value
        int l=-1,r=a.length;
        while(l+1<r) {
            int m=(l+r)>>>1;
            if(a[m]<=x) l=m;
            else r=m;
        }
        return l+1;
    }

}
class DSU {
    long n;
    long[] rank,parent,comp,iscircle;
    public DSU(long n) {
        this.n = n;
        rank= new long[(int) n];
        parent= new long[(int) n];
        comp= new long[(int) n];
        iscircle=new long[(int) n];

        for(int i=0;i<n;i++)
        {
            rank[i]=0;iscircle[i]=0;
            parent[i]=i;comp[i]=1;
        }
    }

    public long find(long n)
    {
        long x=n;
        while(x!=parent[(int) x])
            x=parent[(int) x];
        return x;
    }

    public void uni(long x, long y)
    {
        long px=find(x);long py=find(y);
        if(px==py)return;
        if(rank[(int) px]>rank[(int) py])
        {
            parent[(int) py]=px;comp[(int) px]+=comp[(int) py];
        }
        else if(rank[(int) px]<rank[(int) py])
        {
            parent[(int) px]=py;comp[(int) py]+=comp[(int) px];
        }
        else
        {
            parent[(int) py]=px;
            rank[(int) px]++;
            comp[(int) px]+=comp[(int) py];
        }
    }
}



class Pair <T extends Comparable,T1 extends Comparable> implements Comparable<Pair>{
    T first;
    T1 second;

    public Pair(T first, T1 second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public int compareTo(Pair o) {
        if(this.first.compareTo(o.first)!=0)
        {
            return this.first.compareTo(o.first);
        }
        else
        {
            return this.second.compareTo(o.second);
        }
    }

    @Override
    public String toString() {
        return "Pair{" +
                "first=" + first +
                ", second=" + second +
                '}';
    }
}
