#include <bits/stdc++.h>
using namespace std;
int n, m, ar[5005 * 2], xorss[5005][5005], ans[5005][5005];
void set_max(int& a, const int b) { a = max(a, b); }
int main() {
  for (;;) {
    m = n = 0;
    if (1 != scanf("%d", &n) || n <= 0) break;
    for (auto i = 1; i <= n; i++) scanf("%d", ar + i);
    for (auto r1 = 1; r1 <= n; r1++) ans[r1][r1] = xorss[r1][r1] = ar[r1];
    for (auto len = 1; len <= n; len++) {
      for (auto r1 = 1; r1 <= n; r1++) {
        const auto nv = r1 + len;
        if (n < nv) break;
        const auto z = xorss[r1][nv - 1] ^ xorss[r1 + 1][nv];
        xorss[r1][nv] = z;
      }
    }
    for (auto r1 = 1; r1 <= n; r1++) {
      auto mv1 = xorss[r1][r1];
      for (auto r2 = r1 + 1; r2 <= n; r2++) {
        set_max(mv1, xorss[r1][r2]);
        set_max(xorss[r1][r2], mv1);
      }
    }
    for (auto r2 = n; 0 < r2; --r2) {
      auto mv1 = xorss[r2][r2];
      for (auto r1 = r2 - 1; 0 < r1; --r1) {
        set_max(mv1, xorss[r1][r2]);
        set_max(xorss[r1][r2], mv1);
      }
    }
    for (auto r1 = 1; r1 <= n; r1++) {
      for (auto r2 = r1 + 1; r2 <= n; r2++) set_max(ans[r1][r2], xorss[r1][r2]);
    }
    scanf("%d", &m);
    for (auto i = 0; i < m; i++) {
      int x, y;
      scanf("%d%d", &x, &y);
      printf("%d\n", ans[x][y]);
    }
    break;
  }
  return 0;
}
