#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long n, p2[200005], p5[200005];
long long c[200005];
long long a[200005], t, k;
int main() {
cin >> t;
while (t--) {
cin >> n >> k;
int cnt2 = 0, cnt5 = 0;
p2[0] = 0;
p5[0] = 0;
for (int i = 1 ; i <= n ; i++) {
cin >> a[i];
int c2 = 0, c5 = 0;
int t = a[i];
while (t % 2 == 0) {
c2++;
t /= 2;
}
t = a[i];
while (t % 5 == 0) {
c5++;
t /= 5;
}
p2[i] = p2[i - 1] + c2;
p5[i] = p5[i - 1] + c5;
}
long long ans = 0;
for (int l = 1 ; l <= n ; l++) { //枚举左界
int l1 = l, r = n;
while (l1 < r) { //找符合要求的下界(最小的右界)
int mid = (l1 + r) / 2;
long long t = min((p2[mid] - p2[l - 1]), (p5[mid] - p5[l - 1]));
if (t >= k) r = mid ;
else l1 = mid + 1;
}
long long t = min((p2[l1] - p2[l - 1]), (p5[l1] - p5[l - 1]));
if (t != k) continue;
int l2 = l, r2 = n;
while (l2 < r2) { //上界
int mid = (l2 + r2 + 1) / 2;
long long t = min((p2[mid] - p2[l - 1]), (p5[mid] - p5[l - 1]));
if (t > k) r2 = mid - 1 ;
else l2 = mid;
}
t = min((p2[l2] - p2[l - 1]), (p5[l2] - p5[l - 1]));
if (t != k)continue;
ans += l2 - l1 + 1;
}
cout << ans << endl;
}
return 0;
}