#include <bits/stdc++.h>
#define ll long long
#define ft first
#define sc second
#define el '\n'
#define FOR(i,a,b) for (int i = (a), _b = (b); i <= _b; i ++)
#define FORD(i,b,a) for (int i = (b), _a = (a); i >= _a; i --)
#define boost ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define file(name) freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout)
#define pb push_back
#define all(x) (x).begin(),(x).end()
using namespace std;
const ll N = 2e5;
ll n, q, block = 0, sum = 0, a[N + 1], Ans[N + 1]; 
ll linkLeft[N + 1], linkRight[N + 1], linkCheck[N + 1];

vector<pair<ll, ll>> b;

struct QUERY {
    ll x, y, z;
};

vector<QUERY> query;
struct HIS {
    ll x, y, z, t;
};

stack<HIS> history;

ll binaryL(ll tg) {
    ll l = 1, r = b.size() - 1, ans = -1;
    
    while(l <= r) {
        ll mid = (l + r) >> 1;

        if(b[mid].ft >= tg) {
            r = mid - 1;
            ans = mid;
        } else {
            l = mid + 1;
        }
    }

    return ans;
}

ll binaryR(ll tg) {
    ll l = 1, r = b.size() - 1, ans = -1;

    while(l <= r) {
        ll mid = (l + r) >> 1;

        if(b[mid].ft <= tg) {
            l = mid + 1;
            ans = mid;
        } else {
            r = mid - 1;
        }
    }

    return ans;
}

void read() {
    cin >> n >> q;
    b.pb({0, 0});

    FOR(i, 1, n) {
        cin >> a[i];
        b.pb({a[i], i});
    }

    sort(b.begin() + 1, b.end());

    FOR(i, 1, q) {
        ll x, y; cin >> x >> y;
        
        x = binaryL(x);
        y = binaryR(y);

        if(x == -1 || y == -1) Ans[i] = 0;
        else {
            query.pb({x, y, i});
        }
    }

    block = sqrt(b.size() - 1);

    sort(all(query), [](const QUERY &x, const QUERY &y) {
        ll rx = x.x / block, ry = y.x / block;

        if(rx != ry) return rx < ry;
        return x.y > y.y;
    });
}

void remove(ll k, bool roll) {
    k = b[k].sc;

    ll left = linkLeft[k];
    ll right = linkRight[k];

    if(roll) {
        history.push({left, right, k, sum});
    }

    if(left != -1 && right != -1) {
        sum += abs(a[left] - a[right]);
        sum -= abs(a[left] - a[k]);
        sum -= abs(a[right] - a[k]);
        linkRight[left] = right;
        linkLeft[right] = left;
    } else if(left != -1) {
        sum -= abs(a[left] - a[k]);
        linkRight[left] = right;
    } else if(right != -1) {
        sum -= abs(a[right] - a[k]);
        linkLeft[right] = left;
    }
}

void rollback() {
    while(!history.empty()) {
        auto [x, y, z, t] = history.top();
        history.pop();

        linkLeft[z] = x;
        linkRight[z] = y;
        if(x != -1) linkRight[x] = z;
        if(y != -1)linkLeft[y] = z;
        sum = t;
    }
}

void solve() {
    ll l = 0;

    FOR(i, 0, n / block) {
        ll r = l;
        while(r < query.size() && (query[r].x / block) == i) {
            r ++;
        }

        r --;
        ll curL = max(1LL, i * block), curR = query[l].y;

        FOR(j, 1, n) {
            linkLeft[j] = 0;
            linkRight[j] = 0;
            linkCheck[j] = 0;
        }

        FOR(j, curL, curR) {
            linkCheck[b[j].sc] = 1;
        }

        sum = 0;
        ll cur = 0;
        FOR(j, 1, n) {
            if(linkCheck[j]) {
                if(cur == 0) {
                    cur = j;
                    linkLeft[j] = -1;
                }
                else {
                    sum += abs(a[j] - a[cur]);
                    linkLeft[j] = cur;
                    linkRight[cur] = j;
                    cur = j;
                }
            }
        }

        linkRight[cur] = -1;

        FOR(j, l, r) {
            while(curR > query[j].y) remove(curR --, 0);

            FOR(k, curL, query[j].x - 1) {
                if(curL == 4) cout << k << el;
                remove(k, 1);
            }

            Ans[query[j].z] = sum;
            rollback();
        }

        l = r + 1;
    }
}

void write() {
    FOR(i, 1, q) cout << Ans[i] << el;
}

int main() {
    boost;
    //file();
    read();
    solve();
    write();
    return 0;
}