#include <bits/stdc++.h>
//#define int long long
#define all(v) v.begin(),v.end()
using namespace std;
#define ll long long
#define MAX 1000007
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<class T>
using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
void erase(ordered_multiset<ll> &st, ll &x){
st.erase(st.find_by_order(st.order_of_key(x)));
}
const int N = 1e3 + 10;
const int SQ = 224;
ll x, BIG, SMALL;
struct Mo {
struct Query {
int l, r, idx;
bool operator<(const Query &other) const {
if (l / SQ != other.l / SQ) return l / SQ < other.l / SQ;
return (l / SQ & 1 ? r < other.r : r > other.r);
}
};
vector<Query> queries;
vector<long long> res;
vector<long long> arr;
ordered_multiset<ll> st;
int n, q;
long long ans = 0;
Mo(int _n, int _q) : n(_n), q(_q), arr(_n), res(_q), queries(_q) {}
void add(int idx) {
ll val = arr[idx];
int sz = to_string(val).size();
if(sz == x){
ll mx = BIG - val;
ans += st.order_of_key(mx + 1);
} else if(sz < x){
ll mx = BIG - val, mn = SMALL - val;
ans += st.order_of_key(mx + 1) - st.order_of_key(mn);
}
st.insert(val);
}
void remove(int idx) {
ll val = arr[idx];
erase(st, val);
int sz = to_string(val).size();
if(sz == x){
ll mx = BIG - val;
ans -= st.order_of_key(mx + 1);
} else if(sz < x){
ll mx = BIG - val, mn = SMALL - val;
ans -= st.order_of_key(mx + 1) - st.order_of_key(mn);
}
}
void build() {
int L = 0, R = -1;
sort(queries.begin(), queries.end());
for (auto &[l, r, idx] : queries) {
while (R < r) add(++R);
while (L > l) remove(L++);
while (R > r) remove(R--);
while (L > l) add(--L);
res[idx] = ans;
}
}
void input() {
for (int i = 0; i < q; i++) {
cin >> queries[i].l >> queries[i].r;
queries[i].l--;
queries[i].r--;
queries[i].idx = i;
}
}
};
// 100000000000000000
// 999999999999999999
//
void sol() {
// INPUT
int n; cin >> n >> x;
vector<ll> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
BIG = powl(10, x) - 1;
SMALL = powl(10, x - 1);
int q; cin >> q;
Mo mo(n, q);
mo.arr = arr;
mo.input();
mo.build();
for(auto i : mo.res) cout << i << '\n';
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t = 1;
// cin >> t;
while (t--) {
sol();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgovLyNkZWZpbmUgIGludCBsb25nIGxvbmcKI2RlZmluZSAgYWxsKHYpIHYuYmVnaW4oKSx2LmVuZCgpCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgTUFYIDEwMDAwMDcKCiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+Cgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdGVtcGxhdGU8Y2xhc3MgVD4KdXNpbmcgb3JkZXJlZF9tdWx0aXNldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKdm9pZCBlcmFzZShvcmRlcmVkX211bHRpc2V0PGxsPiAmc3QsIGxsICZ4KXsKICAgIHN0LmVyYXNlKHN0LmZpbmRfYnlfb3JkZXIoc3Qub3JkZXJfb2Zfa2V5KHgpKSk7Cn0KCmNvbnN0IGludCBOID0gMWUzICsgMTA7CmNvbnN0IGludCBTUSA9IDIyNDsKCmxsIHgsIEJJRywgU01BTEw7CnN0cnVjdCBNbyB7CiAgICBzdHJ1Y3QgUXVlcnkgewogICAgICAgIGludCBsLCByLCBpZHg7CiAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUXVlcnkgJm90aGVyKSBjb25zdCB7CiAgICAgICAgICAgIGlmIChsIC8gU1EgIT0gb3RoZXIubCAvIFNRKSByZXR1cm4gbCAvIFNRIDwgb3RoZXIubCAvIFNROwogICAgICAgICAgICByZXR1cm4gKGwgLyBTUSAmIDEgPyByIDwgb3RoZXIuciA6IHIgPiBvdGhlci5yKTsKICAgICAgICB9CiAgICB9OwoKICAgIHZlY3RvcjxRdWVyeT4gcXVlcmllczsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IHJlczsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IGFycjsKICAgIG9yZGVyZWRfbXVsdGlzZXQ8bGw+IHN0OwogICAgaW50IG4sIHE7CiAgICBsb25nIGxvbmcgYW5zID0gMDsKCiAgICBNbyhpbnQgX24sIGludCBfcSkgOiBuKF9uKSwgcShfcSksIGFycihfbiksIHJlcyhfcSksIHF1ZXJpZXMoX3EpIHt9CgogICAgdm9pZCBhZGQoaW50IGlkeCkgewogICAgICAgIGxsIHZhbCA9IGFycltpZHhdOwogICAgICAgIGludCBzeiA9IHRvX3N0cmluZyh2YWwpLnNpemUoKTsKICAgICAgICBpZihzeiA9PSB4KXsKICAgICAgICAgICAgbGwgbXggPSBCSUcgLSB2YWw7CiAgICAgICAgICAgIGFucyArPSBzdC5vcmRlcl9vZl9rZXkobXggKyAxKTsKICAgICAgICB9IGVsc2UgaWYoc3ogPCB4KXsKICAgICAgICAgICAgbGwgbXggPSBCSUcgLSB2YWwsIG1uID0gU01BTEwgLSB2YWw7CiAgICAgICAgICAgIGFucyArPSBzdC5vcmRlcl9vZl9rZXkobXggKyAxKSAtIHN0Lm9yZGVyX29mX2tleShtbik7CiAgICAgICAgfQogICAgICAgIHN0Lmluc2VydCh2YWwpOwogICAgfQoKICAgIHZvaWQgcmVtb3ZlKGludCBpZHgpIHsKICAgICAgICBsbCB2YWwgPSBhcnJbaWR4XTsKICAgICAgICBlcmFzZShzdCwgdmFsKTsKICAgICAgICBpbnQgc3ogPSB0b19zdHJpbmcodmFsKS5zaXplKCk7CiAgICAgICAgaWYoc3ogPT0geCl7CiAgICAgICAgICAgIGxsIG14ID0gQklHIC0gdmFsOwogICAgICAgICAgICBhbnMgLT0gc3Qub3JkZXJfb2Zfa2V5KG14ICsgMSk7CiAgICAgICAgfSBlbHNlIGlmKHN6IDwgeCl7CiAgICAgICAgICAgIGxsIG14ID0gQklHIC0gdmFsLCBtbiA9IFNNQUxMIC0gdmFsOwogICAgICAgICAgICBhbnMgLT0gc3Qub3JkZXJfb2Zfa2V5KG14ICsgMSkgLSBzdC5vcmRlcl9vZl9rZXkobW4pOwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIGJ1aWxkKCkgewogICAgICAgIGludCBMID0gMCwgUiA9IC0xOwogICAgICAgIHNvcnQocXVlcmllcy5iZWdpbigpLCBxdWVyaWVzLmVuZCgpKTsKICAgICAgICBmb3IgKGF1dG8gJltsLCByLCBpZHhdIDogcXVlcmllcykgewogICAgICAgICAgICB3aGlsZSAoUiA8IHIpIGFkZCgrK1IpOwogICAgICAgICAgICB3aGlsZSAoTCA+IGwpIHJlbW92ZShMKyspOwogICAgICAgICAgICB3aGlsZSAoUiA+IHIpIHJlbW92ZShSLS0pOwogICAgICAgICAgICB3aGlsZSAoTCA+IGwpIGFkZCgtLUwpOwogICAgICAgICAgICByZXNbaWR4XSA9IGFuczsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBpbnB1dCgpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgewogICAgICAgICAgICBjaW4gPj4gcXVlcmllc1tpXS5sID4+IHF1ZXJpZXNbaV0ucjsKICAgICAgICAgICAgcXVlcmllc1tpXS5sLS07CiAgICAgICAgICAgIHF1ZXJpZXNbaV0uci0tOwogICAgICAgICAgICBxdWVyaWVzW2ldLmlkeCA9IGk7CiAgICAgICAgfQogICAgfQp9OwoKCgovLyAxMDAwMDAwMDAwMDAwMDAwMDAKLy8gOTk5OTk5OTk5OTk5OTk5OTk5Ci8vCnZvaWQgc29sKCkgewogICAgLy8gSU5QVVQKICAgIGludCBuOyBjaW4gPj4gbiA+PiB4OwogICAgdmVjdG9yPGxsPiBhcnIobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGNpbiA+PiBhcnJbaV07CiAgICB9CiAgICBCSUcgPSBwb3dsKDEwLCB4KSAtIDE7CiAgICBTTUFMTCA9IHBvd2woMTAsIHggLSAxKTsKICAgIGludCBxOyBjaW4gPj4gcTsKICAgIE1vIG1vKG4sIHEpOwogICAgbW8uYXJyID0gYXJyOwogICAgbW8uaW5wdXQoKTsKICAgIG1vLmJ1aWxkKCk7CiAgICBmb3IoYXV0byBpIDogbW8ucmVzKSBjb3V0IDw8IGkgPDwgJ1xuJzsKfQoKc2lnbmVkIG1haW4oKSB7CgogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgaW50IHQgPSAxOwovLyAgICBjaW4gPj4gdDsKCiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sKCk7CiAgICB9Cgp9