#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 50;
int mod = 1e9 + 7;
long long add(long long a, long long b) {
  return (a % mod + b % mod + mod) % mod;
}
long long mul(long long a, long long b) { return (a % mod * (b % mod)) % mod; }
int dp[N][3];
int solve(int rem, int val) {
  if (rem == 0) return val == 1;
  int &ans = dp[rem][val];
  if (~ans) return ans;
  ans = solve(rem - 1, val);
  ans = add(ans, solve(rem - 1, val * -1));
  return ans;
}
int dp2[N][20];
int solve2(int remp, int rem) {
  if (remp == 0) return rem == 0;
  int &ans = dp2[remp][rem];
  if (~ans) return ans;
  ans = solve2(remp - 1, rem);
  if (rem) ans = add(ans, solve2(remp, rem - 1));
  return ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  memset(dp, -1, sizeof(dp));
  memset(dp2, -1, sizeof(dp2));
  int t;
  cin >> t;
  while (t--) {
    int x, y;
    cin >> x >> y;
    map<int, int> co;
    for (int i = 2; i * i <= x; i++) {
      while (x % i == 0) {
        x /= i;
        co[i]++;
      }
    }
    if (x != 1) co[x]++;
    long long ans = solve(y, 1);
    for (auto it : co) ans = mul(ans, solve2(y, it.second));
    cout << ans << "\n";
  }
  return 0;
}
