Link to this code: https://cses.fi/paste/a58efd6878891ee0a606a1/
#include <bits/stdc++.h>
#define uwu return 0;

using namespace std;

const int SIZE = 2e5 + 5, BLK = 5e2, INF = 1e9 + 8;

int arr[SIZE], blk_min[SIZE / BLK + 5];

int query_blk(int L, int R){
    if(L > R)
        return INF;
    int ret = INF;
    for (int i = L; i <= R; i++){
        ret = min(ret, blk_min[i]);
    }
    return ret;
}

int query_arr(int l, int r){
    int ret = INF;
    for (int i = l; i <= r; i++){
        ret = min(ret, arr[i]);
    }
    return ret;
}

int main(){
    int n, q;
    cin >> n >> q;
    for (int i = 1; i < SIZE; i++){
        arr[i] = INF;
        blk_min[i / BLK] = INF;
    }
    for (int i = 1; i <= n; i++){
        cin >> arr[i];
        blk_min[i / BLK] = min(blk_min[i / BLK], arr[i]);
    }
    for (int l, r; q--;){
        cin >> l >> r;
        int ans = query_blk(l / BLK + 1, r / BLK - 1);
        ans = min({ans, query_arr(l, min(r, (l / BLK + 1) * BLK)), query_arr(max((r / BLK) * BLK, l), r)});
        cout << ans << '\n';
    }
}