#include
#define int long long
#define ld long double
#define pii pair
using namespace std;
constexpr int INF = 2e12;
constexpr bool DBG = 0;
constexpr int N = 2e5 + 5, L = 55;
int n, k, a[N], f[N][L], g[N][L];
vector e[N];
int fac[L], tot;
vector wt[L];
void dfs(int u, int fa) {
for (int v : e[u]) {
if (v != fa) dfs(v, u);
}
for (int i = 1; i <= tot; ++i) {
f[u][i] = 0;
for (int v : e[u]) {
if (v != fa) f[u][i] += g[v][i];
}
}
for (int i = 1; i <= tot; ++i) {
g[u][i] = (a[u] % fac[i]) ? INF : f[u][i];
for (int j : wt[i]) {
if (a[u] % fac[j] == 0) g[u][i] = min(g[u][i], f[u][j] + 1);
}
}
}
inline void solve() {
cin >> n >> k;
for (int i = 1; i <= n; ++i) e[i].clear();
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int i = 1, u, v; i < n; ++i) {
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
tot = 0;
for (int x = 2; x <= a[1]; ++x) {
if (a[1] % x == 0) fac[++tot] = x;
}
for (int i = 1; i <= tot; ++i) {
wt[i].clear();
for (int j = 1; j <= tot; ++j) {
if (j != i && fac[j] * fac[j] % fac[i] == 0) wt[i].push_back(j);
}
}
dfs(1, 1);
int ans = a[1];
for (int i = 1; i <= tot; ++i) {
if (f[1][i] < k) ans = max(ans, a[1] * fac[i]);
}
cout << ans << "\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int _ = 1;
cin >> _;
while (_--) solve();
return 0;
}