#include using namespace std; typedef long long ll; typedef pair pll; typedef long double ld; typedef pair pdd; #define vec vector #define For(i, a, n) for(ll i=(ll)a;i pairoperator+(const pair&a, const pair&b){ return {a.first + b.first, a.second + b.second}; } template ostream&operator<<(ostream&os, const pair&c){ return os<<"("< basic_ostream&operator<<(basic_ostream&os, const C&c){ for(auto itr=begin(c);itr!=end(c);++itr){ os<<(itr==begin(c)?"":" ")<<*itr; } return os; } template void dbg(Args&&...args){ ((cerr< primes(ll x) { vec ans; ll i = 2; while(x>1) { if (x%i == 0) ans.push_back(i); while(x%i == 0) x/= i; i++; } return ans; } ll coun(vec &p, vec &primes) { // dbg(primes, p); ll sum = 0, k = 1; For(i, 0, 1 << sz(primes)) { ll t = 1; k = -1; For(j, 0, sz(primes)) if(i & (1 << j)) { t *= primes[j]; k *= -1; } if(t == 1) continue; sum += k*p[t]; // dbg(t, k); } // dbg(sum); return sum; } void solve(){ ll n, k, res = 0; cin >> n >> k; vec v(n); for(ll &x : v) cin >> x; ll l = 0, r = 0, t = 0; vec p(723456, 0); while(1) { // For(i, 0, 5) cerr << (p[i]); // cerr << endl; // dbg(t ,res); // dbg(l, r); if(t < k){ if(r+1 > n) break; auto pr = primes(v[r++]); t += coun(p, pr); // dbg(coun(p, pr)); For(i, 0, 1 << sz(pr)) { ll akt = 1; For(j, 0, sz(pr)) if(i & (1 << j)) akt *= pr[j]; if(akt == 1) continue; p[akt]++; } if (t >= k) res+=n-r+1; } else { auto pr = primes(v[l++]); For(i, 0, 1 << sz(pr)) { ll t = 1; For(j, 0, sz(pr)) if(i & (1 << j)) t *= pr[j]; if(t == 1) continue; p[t]--; } t -= coun(p, pr); if (t >= k) res+=n-r+1; } } cout << res << '\n'; } int main(){ cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int t = 1; while(t--)solve(); return 0; }