#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define INF_MAX 1000000000  
#define INF_MIN -1000000000 

int ST[400005], st1[400005], n, m, u, v;

void update1(int id, int l, int r, int i, int v) {
    if (i < l || r < i) {
        return;
    }
    if (l == r) {
        st1[id] = v;
        return;
    }

    int mid = (l + r) / 2;
    update1(id * 2, l, mid, i, v);
    update1(id * 2 + 1, mid + 1, r, i, v);

    st1[id] = min(st1[id * 2], st1[id * 2 + 1]);
}

void update(int id, int l, int r, int i, int v) {
    if (i < l || r < i) {
        return;
    }
    if (l == r) {
        ST[id] = v;
        return;
    }

    int mid = (l + r) / 2;
    update(id * 2, l, mid, i, v);
    update(id * 2 + 1, mid + 1, r, i, v);

    ST[id] = max(ST[id * 2], ST[id * 2 + 1]);
}

int get1(int id, int l, int r, int u, int v) {
    if (v < l || r < u) {
        return INF_MAX;
    }
    if (u <= l && r <= v) {
        return st1[id];
    }
    int mid = (l + r) / 2;
    return min(get1(id * 2, l, mid, u, v), get1(id * 2 + 1, mid + 1, r, u, v));
}

int get(int id, int l, int r, int u, int v) {
    if (v < l || r < u) {
        return INF_MIN;
    }
    if (u <= l && r <= v) {
        return ST[id];
    }
    int mid = (l + r) / 2;
    return max(get(id * 2, l, mid, u, v), get(id * 2 + 1, mid + 1, r, u, v));
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
 
    freopen("KEOCO.INP", "r", stdin);
    freopen("KEOCO.OUT", "w", stdout);

    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> v;
        update(1, 1, n, i, v);
        update1(1, 1, n, i, v);
    }
    
    for (int i = 1; i <= m; i++) {
        cin >> u >> v;
        ll ma = get(1, 1, n, u, v);
        ll mi = get1(1, 1, n, u, v);
        cout << ma - mi << endl;
    }

    return 0;
}
