#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <set>
#include <map>
#include <vector>
#include <iostream>
#include <algorithm>
#include <bitset>
using namespace std;
#define rep(i,n) for (int i = 0; i < (int)(n); i++)
#define foreach(it,v) for (__typeof((v).end()) it = (v).begin(); it != (v).end(); it++)
typedef long long ll;
typedef pair <int, int> PII;

int trans(int x) {
	static char buf[100];
	sprintf(buf, "%d", x);
	int n = strlen(buf);
	sort(buf, buf + n);
	reverse(buf, buf + n);
	buf[n] = 0;
	int res;
	sscanf(buf, "%d", &res);
	return res;
}
const int N = 100005;

int main() {
	int n, m;
	while (scanf("%d%d", &n, &m) != EOF) {
		static int a[N], L[N], R[N], Next[N], ind[N];
		static ll sl[N], sr[N];
		fill(ind, ind + n, -1);
		vector <int> coor;
		rep (i, n) {
			scanf("%d", &a[i]);
			a[i] = trans(a[i]);
			coor.push_back(a[i]);
		}
		sort(coor.begin(), coor.end());
		coor.resize(unique(coor.begin(), coor.end()) - coor.begin());
		rep (i, n) a[i] = lower_bound(coor.begin(), coor.end(), a[i]) - coor.begin();
		for (int i = n - 1; i >= 0; i--) {
			if (ind[a[i]] == -1) {
				Next[i] = n;
			} else {
				Next[i] = ind[a[i]];
			}
			ind[a[i]] = i;
		}
		PII res(n, n);
		for (int i = n - 1; i >= 0; i--) {
			if (Next[i] < res.first) {
				res.second = res.first;
				res.first = Next[i];
			} else if (Next[i] < res.second) {
				res.second = Next[i];
			}
			L[i] = res.first;
			R[i] = res.second;
		}
		sl[n] = sr[n] = 0;
		for (int i = n - 1; i >= 0; i--) {
			sl[i] = sl[i + 1] + L[i];
			sr[i] = sr[i + 1] + R[i];
		}
		ll l, r, ans = 0;
		rep (_, m) {
			scanf("%I64d%I64d", &l, &r);
			l--;
			l += ans; r -= ans;
			int i = upper_bound(L + l, L + r, r) - L; //r >= L[i]
			ll cur = r * (i - l) - (sl[l] - sl[i]);
			i = upper_bound(R + l, R + r, r) - R;
			cur -= r * (i - l) - (sr[l] - sr[i]);
			ans = cur;
			printf("%I64d\n", ans);
		}
	}
}
