#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int read() {
int res = 0;
char ch;
while ((ch = getchar()) < '0' || ch > '9');
res = ch ^ 48;
while ((ch = getchar()) >= '0' && ch <= '9') {
res = (res >> 1) + (res >> 3) + ch - '0';
}
return res;
}
//int read() {
// char ch;
// int res = 0;
// while ((ch = getchar()) < '0' || ch > '9');
// res = ch ^ 48;
// while ((ch = getchar()) >= '0' && ch <= '9') {
// res = (res << 1) + (res << 3) + ch - '0';
// }
// return res;
//}
int stmax[100001][40];
int stmin[100001][40];
int a[100001];
int n, m, l, r;
//void st_create() {
// int k = log2(n); // log(n)/log(2.0)
// for (int j = 1; j <= k; j++) {
// for (int i = 1; i <= n - (1 << j) + 1; i++) {
// stmin[i][j] = min(stmin[i][j - 1], stmin[i + (1 << (j - 1))][j - 1]);
// stmax[i][j] = max(stmax[i][j - 1], stmax[i + (1 << (j - 1))][j - 1]);
// }
// }
//}
void st_create() {
int k = log2(n);
for (int j = 1; j <= k; j++) {
for (int i = 1; i <= n - (1 << j) + 1; i++) {
stmax[i][j] = max(stmax[i][j - 1], stmax[i + (1 << (j - 1))][j - 1]);
stmin[i][j] = min(stmin[i][j - 1], stmin[i + (1 << (j - 1))][j - 1]);
}
}
}
//int Quaryax(int l, int r) {
// int k = log2(r - l + 1); // log(r - l + 1) / log(2.0)
// return max(stmax[l][k], stmax[r - (1 << k) + 1][k]);
//}
//
//int Quaryin(int l, int r) {
// int k = log2(r - l + 1); // log(r - l + 1) / log(2.0)
// return min(stmin[l][k], stmin[r - (1 << k) + 1][k]);
//}
//
//int RMQ(int l, int r) {
// return Quaryax(l, r) - Quaryin(l, r);
//}
int main() {
n = read(), m = read();
for (int i = 1; i <= n; i++) {
a[i] = read();
stmax[i][0] = a[i];
stmin[i][0] = a[i];
}
st_create();
while (m--) {
l = read(), r = read();
int k = log2(r - l + 1);
int m1 = max(stmax[l][k], stmax[r - (1 << k) + 1][k]);
int m2 = min(stmin[l][k], stmin[r - (1 << k) + 1][k]);
printf("%d\n", m1 - m2);
// printf("%d\n", RMQ(l, r));
}
return 0;
}