using System;

class Program
{
    static void Main()
    {
        int duzina_nizova, Xor, And;
        int[] a, b; //zadovoljava 10^9 limit
        long vrednost_niza, max_vrednost_niza;  //int*int=long (zato sto 32bit*32bit=64bit)

        duzina_nizova = int.Parse(Console.ReadLine());

        //Ovo radi samo ako su celi nizovi uneti u jednoj liniji i nikad drugacije
        //Takodje je ogromna optimizacija zato sto bih morao da imam minimum jos jedan for i morao bih da imam 2 niza 
        //tipa string koja se kasnije rastave u nizove tipa int
        a = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
        b = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);

        max_vrednost_niza = 0;

        for (int i = 0; i < duzina_nizova; i++)
        {
            Xor = 0;
            And = int.MaxValue;

            for (int j = i; j < duzina_nizova; j++)
            {
                Xor ^= a[j];
                And &= b[j];

                vrednost_niza = (long)Xor * (long)And; //Kompajler baca warning ako je cast samo jedan pa sam oba (suzica)
                max_vrednost_niza = Math.Max(max_vrednost_niza, vrednost_niza);

                // ovo je hak za malo ubrzanje
                if (And == 0)
                {
                    break;
                }
            }
        }

        Console.WriteLine(max_vrednost_niza);
    }
}