#include <bits/stdc++.h>
using namespace std;
int n, l[202020][20], r[202020][20], p[202020][20], x, y, t;
vector<int> h, st;
void init(int N, vector<int> H) {
n = N, h = H, h.push_back(0);
for (int i = 0; i < n; l[i][0] = st.size() ? st.back() : n, st.push_back(i++))
for (; st.size() && h[st.back()] < h[i]; st.pop_back())
;
st = {};
for (int i = n; i--; p[i][0] = h[l[i][0]] > h[r[i][0] = st.size() ? st.back() : n] ? l[i][0] : r[i][0], st.push_back(i))
for (; st.size() && h[st.back()] < h[i]; st.pop_back())
;
l[n][0] = r[n][0] = p[n][0] = n, h.back() = 1e9;
for (int k = 1; k < 20; k++)
for (int i = 0; i <= n; i++)
p[i][k] = p[p[i][k - 1]][k - 1], l[i][k] = l[l[i][k - 1]][k - 1], r[i][k] = r[r[i][k - 1]][k - 1];
}
int minimum_jumps(int A, int B, int C, int D) {
x = y = B;
for (int k = 20; k--;)
if (r[x][k] < C)
x = r[x][k];
if (r[x][0] > D)
return -1;
for (int k = 20; k--;)
if (l[y][k] >= A && h[l[y][k]] < h[x])
y = l[y][k];
if (l[y][0] >= A && r[l[y][0]][0] <= D)
return 1;
x = r[x][t = 0];
for (int k = 20; k--;)
if (h[p[y][k]] < h[x])
y = p[y][k], t += 1 << k;
for (int k = 20; k--;)
if (r[y][k] <= x)
y = r[y][k], t += 1 << k;
return t;
}