func_code_string: #if !defined(ONLINE_JUDGE)       #include  prettyprint.hpp         #include  debug.h    #else       #include <bits/stdc++.h>       using namespace std;       #define deb(...) 1729       #define dbg(...) 29       #define cer(x) 13   #endif   const bool testcase = 1;   typedef long long int ll;   const ll mod1 = 1000000007;   const ll mod2 = 998244353;      #define fast ios_base::sync_with_stdio(0);cin.tie(NULL)    #define test int T_T = 1; if(testcase){cin>>T_T;}while(T_T--)   #define all(ve) ve.begin(),ve.end()      const ll N = 1e7 + 7;   std::vector<ll> spf, prime;   std::vector<bool> isp;   void sieve(ll MAXN) {        spf.resize(MAXN);       spf[1] = 1;        for (int i=2; i<MAXN; i++)            spf[i] = i;        for (int i=4; i<MAXN; i+=2)            spf[i] = 2;           for (int i=3; i*i<MAXN; i++)        {            if (spf[i] == i)            {                for (int j=i*i; j<MAXN; j+=i)                {                   if (spf[j]==j)                        spf[j] = i;                }           }        }    }    void linearSieve(ll n) {       spf.resize(n);       isp.resize(n,true);       isp[0] = isp[1] = 0;       isp[2] = 1;       for (int i = 2; i <= n; ++i) {           if(isp[i]) {               prime.push_back(i);               spf[i] = i;           }           for (int j = 0; j < prime.size() && prime[j] <= spf[i] && prime[j] * i <= N; ++j) {               isp[i*prime[j]] = 0;               spf[i*prime[j]] = prime[j];           }       }   }   map<ll,ll> getFactor(ll x) {        map<ll,ll> ret;       while (x != 1) {            ret[spf[x]]++;           x = x / spf[x];        }        return ret;    }    // SOLVE   void solve() {       // cout << N <<   n ;       // dbg(spf);       ll n, k;       cin >> n >> k;       std::vector<ll> a(n);       for (int i = 0; i < n; ++i) {           cin >> a[i];           // dbg(a[i]);           map<ll,ll> pf = getFactor(a[i]);           // dbg(pf);           ll cur = 1;           for(auto [u, v]: pf) {               if(v & 1) {                  cur = cur * u;                }           }           a[i] = cur;       }       set<ll> st;       ll ans = 0;       for (int i = 0; i < n; ++i) {           if(st.find(a[i]) != st.end()) {               ans++;               st.clear();           }           st.insert(a[i]);           // while(!st.count())       }       if(st.size()) {           ans++;       }       cout << ans <<   n ;   }      //MAIN   int main(){          fast;       #ifndef ONLINE_JUDGE           // for getting input from input.txt           freopen( input.txt ,  r , stdin);           // for writing output to output.txt           freopen( output.txt ,  w , stdout);           // for debug in error.txt           freopen( error.txt ,  w , stderr);       #endif          sieve(N);       test {           solve();       }       return 0;   }   