#include <bits/stdc++.h>
using namespace std;
long long power(int a, int b) {
//计算a的b次方
long long result = 1;
while (b > 0) {
result *= a;
b--;
}
return result;
}
int main() {
int N, M;
cin >> N >> M;
int* C = new int [N];
int* B = new int [M];
int* S = new int [M];
for (int i = 0; i < N; ++i)
cin >> C[i];
for (int i = 0; i < M; ++i) {
cin >> B[i] >> S[i];
}
for (int i = 0; i < M; ++i) {
// cout<<"第"<<i<<"批符合要求的:";
int t = 1;
int Max = 0;
int count = 0;
if (B[i] > 1) {
//基数大于1
//二分查找
int low = 0;
while (1) {
long long temp = power(B[i], t) + S[i];
if (temp > C[N - 1])
break;
for (int high = N - 1; low <= high; ) {
int mid = (low + high) / 2;
int length = 0;
if (temp == C[mid]) {
length++;
count++;
int k = mid + 1;
while (k < N && C[k] == temp) {
k++, length++, count++;
}
int l = mid - 1;
while (l >= 0 && C[l] == temp)
l--, length++, count++;
if(length > Max)
Max = length;
break;
}else if(temp > C[mid]){
low = mid + 1;
}else high = mid - 1;
}
t++;
}
} else if (C[N - 1] >= S[i] + B[i]) {
//基数为0或者1
for (int j = 0; j < N; ++j) {
if (C[j] == S[i] + B[i]) {
count++;
Max++;
}
}
}
// cout<<endl;
cout << count << " " << Max << endl;
}
}
// 64 位输出请用 printf("%lld")