Link to this code: https://cses.fi/paste/92acd924a955ed05c4ba93/
#include <stdio.h>

#define N 100000
#define Q 200000

int n, q, h[N], a[Q], b[Q], sta[N], ff[N], ii[Q], ans[Q], top;

int main() {
    scanf("%d%d", &n, &q);
    for (int i = 0; i < n; ++i)
        scanf("%d", &h[i]);

    for (int i = 0; i < q; ++i) {
        scanf("%d%d", &a[i], &b[i]);
        ++ff[--a[i]], --b[i];
    }
    for (int i = n - 2; i >= 0; --i)
        ff[i] += ff[i + 1];
    for (int i = 0; i < q; ++i)
        ii[--ff[a[i]]] = i;

    for (int i_ = 0, i = n - 1; i >= 0; --i) {
        while (top && h[sta[top - 1]] <= h[i])
            --top;
        sta[top++] = i;

        for (; i_ < q && a[ii[i_]] == i; ++i_) {
            int k = top;
            for (int j = 1 << 16; j; j >>= 1)
                if (k - j >= 0 && sta[k - j] <= b[ii[i_]])
                    k -= j;
            ans[ii[i_]] = top - k;
        }
    }
    for (int i = 0; i < q; ++i)
        printf("%d\n", ans[i]);

    return 0;
}