#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;
}