#include <bits/stdc++.h>
using namespace std;
int n, l, r, q;
int a[5010];
int DP[5010][5010];
int chk[5010][5010];
int update(int s, int e) {
  if (s == e) return DP[s][e];
  if (chk[s][e]) return DP[s][e];
  chk[s][e] = 1;
  int tmpmax;
  tmpmax = max(update(s, e - 1), update(s + 1, e));
  tmpmax = max(DP[s][e], tmpmax);
  DP[s][e] = tmpmax;
  return DP[s][e];
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  for (int i = 0; i < n; i++) {
    for (int j = 1; i + j <= n; j++) {
      if (i == 0)
        DP[j][i + j] = a[j];
      else
        DP[j][i + j] = (DP[j][i + j - 1] ^ DP[j + 1][i + j]);
    }
  }
  update(1, n);
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    scanf("%d%d", &l, &r);
    printf("%d\n", DP[l][r]);
  }
  return 0;
}
