#include <bits/stdc++.h>
int a[5001], l[100001], r[100001];
int xor_mat[5001][5001], max_mat[5001][5001];
void printMatrix(int a[][5001], int m, int n) {
  int i, j;
  for (i = 1; i <= m; i++) {
    for (j = 1; j <= n; j++) {
      printf("%d ", a[i][j]);
    }
    printf("\n");
  }
}
int max_3(int x, int y, int z) {
  int max = x;
  if (y > max) max = y;
  if (z > max) max = z;
  return max;
}
int main() {
  int n, i, q, j, left, right, seg_len;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  scanf("%d", &q);
  for (i = 1; i <= q; i++) {
    scanf("%d%d", &l[i], &r[i]);
  }
  for (j = 1; j <= n; j++) {
    xor_mat[1][j] = a[j];
  }
  for (i = 2; i <= n; i++) {
    for (j = 1; j <= n - i + 1; j++) {
      xor_mat[i][j] = xor_mat[i - 1][j] ^ xor_mat[i - 1][j + 1];
    }
  }
  for (j = 1; j <= n; j++) {
    max_mat[1][j] = a[j];
  }
  for (i = 2; i <= n; i++) {
    for (j = 1; j <= n - i + 1; j++) {
      max_mat[i][j] =
          max_3(max_mat[i - 1][j], max_mat[i - 1][j + 1], xor_mat[i][j]);
    }
  }
  for (i = 1; i <= q; i++) {
    left = l[i];
    right = r[i];
    seg_len = right - left + 1;
    printf("%d\n", max_mat[seg_len][left]);
  }
}
