#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    int arr[5010];
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    //for(int i=0;i<n;i++){
    //    cout<<arr[i];
    //}
    int f[5010][5010];
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
        f[i][j]=0;
      }    
    }
    for(int i=0;i<n;i++){
        //cout<<i;
        //cout<<arr[i];
        f[i][i] = arr[i];
        //cout<<f[i][i];
    }
    //cout<<f[1][1];
    for(int i=0;i<n-1;i++){
        int answ = arr[i];
        for(int j=i+1;j<n;j++){
            answ = answ ^ arr[j];
            if((j-i)%2==0){
                f[i][j] = arr[i] ^ arr[j];
            }
            else{
                f[i][j] = answ;
            }
        }
    }
    //cout<<f[1][1];
    int ans[5010][5010];
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
        ans[i][j]=0;
      }
    }
    for(int i=0;i<n;i++){
        ans[i][i] = arr[i];
    }
    // cout<<ans[0][0];
    int maxrow[5010][5010];
    for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
        maxrow[i][j]=0;
      }
    }
    for(int i=0;i<n;i++){
        maxrow[i][i] = arr[i];
    }
    //cout<<ans[0][0];
    //cout<<maxrow[0][0];
    //cout<<maxrow[0][1];
     for(int j=1;j<n;j++){
         // cout<<j<<" "<<j<<" ,";
         int max = f[j][j];
         // cout<<f[j][j];
         for(int i=j-1;i>=0;i--){
             // cout<<i<<" "<<j<<" ,";
             if(f[i][j]>max){
                 max = f[i][j];
             }
              maxrow[i][j] = max;
             // cout<<maxrow[i][j];
         }
     }
     //cout<<maxrow[0][1];
     // cout<<"\n";
     // for(int i=0;i<n;i++){
     //   for(int j=0;j<n;j++){
     //     cout<<f[i][j]<<" ";
     //   }
     //   cout<<"\n";
     // }
     // for(int i=0;i<n;i++){
     //   for(int j=0;j<n;j++){
     //     cout<<maxrow[i][j]<<" ";
     //   }
     //   cout<<"\n";
     // }
     // cout<<ans[0][0];
     for(int i=0;i<n-1;i++){
         for(int j=i+1;j<n;j++){
             // cout<<i<<" "<<j<<"\n";
             // cout<<i<<" "<<j-1<<"\n";
             // cout<<ans[i][j];
             //ans[i][j] = max(ans[i][j-1], maxrow[i][j]);
             if(ans[i][j-1] > maxrow[i][j]){
             	ans[i][j] = ans[i][j-1];
             }
             else{
             	ans[i][j] = maxrow[i][j];
             }
         }
     }
     //ans[0][1] = max(ans[0][0], ans[0][1]);
     //cout<<ans[0][1];
     int q;
     cin>>q;
     int x,y;
     // cout<<ans[0][0];
     // cout<<f[0][0];
     // for(int i=0;i<n;i++){
     //   for(int j=0;j<n;j++){
     //     cout<<ans[i][j]<<" ";
     //   }
     //   cout<<"\n";
     // }
     for(int i=0;i<q;i++){
         cin>>x>>y;
         // cout<<x<<"  "<<y<<endl;
         cout<<ans[x-1][y-1]<<endl;
     }
     return 0;
}
