#include <iostream>
#include <vector>

using namespace std;

vector<pair<int, int>> tr;
vector<int> A;

void build(int v, int l, int r) {
    if (r - l == 1) {
        tr[v].first = A[l];
        tr[v].second = l + 1;
        return;
    }
    int m = (l + r) / 2;
    build(2 * v + 1, l, m);
    build(2 * v + 2, m, r);
    tr[v] = max(tr[2 * v + 1], tr[2 * v + 2]);
}

pair<int, int> query(int v, int l, int r, int ql, int qr) {
    if (ql == l && qr == r) {
        return tr[v];
    }
    if (qr <= ql) {
        return make_pair(-1e9, -1);
    }
    int m = (l + r) / 2;
    pair<int, int> left = query(2 * v + 1, l, m, ql, min(m, qr));
    pair<int, int> right = query(2 * v + 2, m, r, max(m, ql), qr);
    return max(left, right);
}

void update(int v, int l, int r, int pos) {
    if (r - l == 1) {
        tr[v].first = A[l];
        return;
    }
    int m = (l + r) / 2;
    if (pos < m) {
        update(2 * v + 1, l, m, pos);
    } else {
        update(2 * v + 2, m, r, pos);
    }
    tr[v] = max(tr[2 * v + 1], tr[2 * v + 2]);
}

int main()
{
    int n;
    cin >> n;
    A.resize(n);
    for (int i = 0; i < n; ++i)
        cin >> A[i];
    tr.resize(4*n);
    build(0, 0, n);
    int k;
    cin >> k;
    while (k --> 0) {
        int l, r;
        cin >> l >> r;
        l--;
        pair<int, int> ans = query(0, 0, n, l, r);
        cout << ans.first << " " << ans.second << "\n";
    }
    return 0;
}
