#include <bits/stdc++.h>
#define ll long long
#define str string
#define endl '\n'
#define pb push_back
#define Mask(i, j) (i & (1 << j))
#define fi first
#define se second
#define all(a) a.begin(), a.end()
#define foru(c, a, b) for(ite_type c = a; c <= b; ++c)
#define ford(c, a, b) for(ite_type c = a; c >= b; --c)
#define faster ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define file(x, sur) if(fopen((x + ".inp").c_str(), "r")) \
freopen((x + ".inp").c_str(), "r", stdin), \
freopen((x + sur).c_str(), "w", stdout);
using namespace std;
mt19937_64 rd(chrono::steady_clock::now().time_since_epoch().count());
ll Rand(ll l, ll r) {
return l + rd() % (r - l + 1);
}
const str name = "not_yet_defined";
typedef int ite_type;
typedef __int128 i128;
typedef pair<int, int> pii;
const bool is_file = 0, is_making_ans = 0;
const int ntest = 200;
const int maxn = 5e5 + 9, lim = 1e3, max_ai = 1e4;
const ll inf = 1e18, int_inf = 0x3f3f3f3f;
const int dx[] = {-2, -2, -1, -1, 1, 1, 2, 2},
dy[] = {1, -1, 2, -2, 2, -2, 1, -1};
const int mod = 998244353;
i128 extended_euclid(__int128 a, __int128 b, __int128& x, __int128& y) {
if(!b) {
x = 1, y = 0;
return a;
}
i128 tmp = extended_euclid(b, a % b, x, y);
i128 c = x;
x = y;
y = c - (a / b) * y;
return tmp;
}
pair<i128, i128> crt(pair<i128, i128> a, pair<i128, i128> b) {
if(a.fi < b.fi) swap(a, b);
if(b.fi == 1) return a;
i128 x, y;
i128 gcd = extended_euclid(a.fi, b.fi, x, y);
if((b.se - a.se) % gcd)
return {-1, -1};
i128 lcm = a.fi / gcd * b.fi;
i128 ans = (x * (b.se - a.se) / gcd * a.fi + a.se) % lcm;
if(ans < 0) ans += lcm;
if(ans > 1e18) return {-1, -1};
return {lcm, ans};
}
struct leaves {
i128 m, r;
int id;
};
vector<pii> graph[maxn];
vector<int> ct[maxn];
pair<i128, i128> req[maxn];
int par[maxn] = {}, ss[maxn], del[maxn], is_leaf[maxn];
ll path[maxn];
void dfs(int u, int p, pair<i128, i128> cur, ll sum = 0) {
if(cur.fi == -1) return;
path[u] = sum;
req[u] = cur;
int cnt = 0;
for(pii v : graph[u])
if(v.fi != p) {
int mod = int(graph[u].size()) - (u != 1);
pii nxt = {mod, (cnt++ - sum) % mod};
if(nxt.se < 0) nxt.se += mod;
pair<i128, i128> burb = crt(cur, nxt);
dfs(v.fi, u, burb, sum + v.se);
}
}
void compute_size(int u, int p) {
ss[u] = 1;
for(auto[v, w] : graph[u])
if(v != p && !del[v])
compute_size(v, u), ss[u] += ss[v];
}
int find_centroid(int u, int p, int n) {
for(auto[v, w] : graph[u])
if(v != p && !del[v] && ss[v] > n / 2)
return find_centroid(v, u, n);
return u;
}
int init(int u) {
compute_size(u, 0);
u = find_centroid(u, 0, ss[u]);
del[u] = 1;
for(auto[v, w] : graph[u])
if(!del[v] && v != par[u])
ct[u].pb(init(v));
else if(v != par[u]) ct[u].pb(0);
if(!del[par[u]] && u != 1) par[u] = init(par[u]);
return u;
}
bool check(ll x, pair<i128, i128> p) {
return x % p.fi == p.se;
}
int vis[maxn] = {};
int special_binary_search(ll x, int root) {
vector<int> order;
int ans = root;
while(!(is_leaf[ans])) {
// assert(!vis[ans]);
// if(!ans) cout << order.back() << endl;
vis[ans] = 1;
order.pb(ans);
// assert(ans);
if(check(x, req[ans]))
ans = ct[ans][(path[ans] + x) % (int(ct[ans].size()))];
else ans = par[ans];
}
for(int e : order)
vis[e] = 0;
return ans;
}
void solve() {
int n, m; cin >> n >> m;
foru(i, 1, n) graph[i].clear(), ct[i].clear(), req[i] = {-1, -1}, del[i] = 0;
vector<pii> edges(n + 1);
foru(i, 2, n) cin >> edges[i].fi, par[i] = edges[i].fi;
foru(i, 2, n) cin >> edges[i].se;
foru(i, 2, n) graph[edges[i].fi].pb({i, edges[i].se}),
graph[i].pb({edges[i].fi, edges[i].se});
foru(i, 2, n)
is_leaf[i] = (graph[i].size() == 1), sort(all(graph[i]));
dfs(1, 0, {1, 0});
int root = init(1);
vector<int> ans;
while(m--) {
ll x; cin >> x;
if(n == 1)
ans.pb(1);
else ans.pb(special_binary_search(x, root));
}
for(int a : ans)
cout << a << ' ';
cout << endl;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
file(name, ".out");
//file and ios boost
int t; cin >> t;
while(t--)
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHN0ciBzdHJpbmcKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBNYXNrKGksIGopIChpICYgKDEgPDwgaikpCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLCBhLmVuZCgpCiNkZWZpbmUgZm9ydShjLCBhLCBiKSAgZm9yKGl0ZV90eXBlIGMgPSBhOyBjIDw9IGI7ICsrYykKI2RlZmluZSBmb3JkKGMsIGEsIGIpICBmb3IoaXRlX3R5cGUgYyA9IGE7IGMgPj0gYjsgLS1jKQojZGVmaW5lIGZhc3RlciBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBmaWxlKHgsIHN1cikgaWYoZm9wZW4oKHggKyAiLmlucCIpLmNfc3RyKCksICJyIikpIFwKICAgICAgICAgICAgICAgICAgICAgICAgZnJlb3BlbigoeCArICIuaW5wIikuY19zdHIoKSwgInIiLCBzdGRpbiksIFwKICAgICAgICAgICAgICAgICAgICAgICAgZnJlb3BlbigoeCArIHN1cikuY19zdHIoKSwgInciLCBzdGRvdXQpOwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCm10MTk5MzdfNjQgcmQoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKCmxsIFJhbmQobGwgbCwgbGwgcikgewogICAgcmV0dXJuIGwgKyByZCgpICUgKHIgLSBsICsgMSk7Cn0KCmNvbnN0IHN0ciBuYW1lID0gIm5vdF95ZXRfZGVmaW5lZCI7CnR5cGVkZWYgaW50IGl0ZV90eXBlOwp0eXBlZGVmIF9faW50MTI4IGkxMjg7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwoKY29uc3QgYm9vbCBpc19maWxlID0gMCwgaXNfbWFraW5nX2FucyA9IDA7CmNvbnN0IGludCBudGVzdCA9IDIwMDsKY29uc3QgaW50IG1heG4gPSA1ZTUgKyA5LCBsaW0gPSAxZTMsIG1heF9haSA9IDFlNDsKY29uc3QgbGwgaW5mID0gMWUxOCwgaW50X2luZiA9IDB4M2YzZjNmM2Y7CmNvbnN0IGludCBkeFtdID0gey0yLCAtMiwgLTEsIC0xLCAxLCAxLCAyLCAyfSwKICAgICAgICAgIGR5W10gPSB7MSwgLTEsIDIsIC0yLCAyLCAtMiwgMSwgLTF9Owpjb25zdCBpbnQgbW9kID0gOTk4MjQ0MzUzOwoKaTEyOCBleHRlbmRlZF9ldWNsaWQoX19pbnQxMjggYSwgX19pbnQxMjggYiwgX19pbnQxMjgmIHgsIF9faW50MTI4JiB5KSB7CiAgIGlmKCFiKSB7CiAgICAgIHggPSAxLCB5ID0gMDsKICAgICAgcmV0dXJuIGE7CiAgIH0KICAgaTEyOCB0bXAgPSBleHRlbmRlZF9ldWNsaWQoYiwgYSAlIGIsIHgsIHkpOwogICBpMTI4IGMgPSB4OwogICB4ID0geTsKICAgeSA9IGMgLSAoYSAvIGIpICogeTsKICAgcmV0dXJuIHRtcDsKfQoKcGFpcjxpMTI4LCBpMTI4PiBjcnQocGFpcjxpMTI4LCBpMTI4PiBhLCBwYWlyPGkxMjgsIGkxMjg+IGIpIHsKICAgaWYoYS5maSA8IGIuZmkpIHN3YXAoYSwgYik7CiAgIGlmKGIuZmkgPT0gMSkgcmV0dXJuIGE7CiAgIGkxMjggeCwgeTsKICAgaTEyOCBnY2QgPSBleHRlbmRlZF9ldWNsaWQoYS5maSwgYi5maSwgeCwgeSk7CiAgIGlmKChiLnNlIC0gYS5zZSkgJSBnY2QpCiAgICAgIHJldHVybiB7LTEsIC0xfTsKICAgaTEyOCBsY20gPSBhLmZpIC8gZ2NkICogYi5maTsKICAgaTEyOCBhbnMgPSAoeCAqIChiLnNlIC0gYS5zZSkgLyBnY2QgKiBhLmZpICsgYS5zZSkgJSBsY207CiAgIGlmKGFucyA8IDApIGFucyArPSBsY207CiAgIGlmKGFucyA+IDFlMTgpIHJldHVybiB7LTEsIC0xfTsKICAgcmV0dXJuIHtsY20sIGFuc307Cn0KCnN0cnVjdCBsZWF2ZXMgewogICBpMTI4IG0sIHI7CiAgIGludCBpZDsKfTsKCnZlY3RvcjxwaWk+IGdyYXBoW21heG5dOwp2ZWN0b3I8aW50PiBjdFttYXhuXTsKcGFpcjxpMTI4LCBpMTI4PiByZXFbbWF4bl07CmludCBwYXJbbWF4bl0gPSB7fSwgc3NbbWF4bl0sIGRlbFttYXhuXSwgaXNfbGVhZlttYXhuXTsKbGwgcGF0aFttYXhuXTsKCnZvaWQgZGZzKGludCB1LCBpbnQgcCwgcGFpcjxpMTI4LCBpMTI4PiBjdXIsIGxsIHN1bSA9IDApIHsKICAgaWYoY3VyLmZpID09IC0xKSByZXR1cm47CiAgIHBhdGhbdV0gPSBzdW07CiAgIHJlcVt1XSA9IGN1cjsKCiAgIGludCBjbnQgPSAwOwogICBmb3IocGlpIHYgOiBncmFwaFt1XSkKICAgICAgaWYodi5maSAhPSBwKSB7CiAgICAgICAgIGludCBtb2QgPSBpbnQoZ3JhcGhbdV0uc2l6ZSgpKSAtICh1ICE9IDEpOwogICAgICAgICBwaWkgbnh0ID0ge21vZCwgKGNudCsrIC0gc3VtKSAlIG1vZH07CiAgICAgICAgIGlmKG54dC5zZSA8IDApIG54dC5zZSArPSBtb2Q7CiAgICAgICAgIHBhaXI8aTEyOCwgaTEyOD4gYnVyYiA9IGNydChjdXIsIG54dCk7CgogICAgICAgICBkZnModi5maSwgdSwgYnVyYiwgc3VtICsgdi5zZSk7CiAgICAgIH0KfQoKCnZvaWQgY29tcHV0ZV9zaXplKGludCB1LCBpbnQgcCkgewogICBzc1t1XSA9IDE7CiAgIGZvcihhdXRvW3YsIHddIDogZ3JhcGhbdV0pCiAgICAgIGlmKHYgIT0gcCAmJiAhZGVsW3ZdKQogICAgICAgICBjb21wdXRlX3NpemUodiwgdSksIHNzW3VdICs9IHNzW3ZdOwp9CgppbnQgZmluZF9jZW50cm9pZChpbnQgdSwgaW50IHAsIGludCBuKSB7CiAgIGZvcihhdXRvW3YsIHddIDogZ3JhcGhbdV0pCiAgICAgIGlmKHYgIT0gcCAmJiAhZGVsW3ZdICYmIHNzW3ZdID4gbiAvIDIpCiAgICAgICAgIHJldHVybiBmaW5kX2NlbnRyb2lkKHYsIHUsIG4pOwogICByZXR1cm4gdTsKfQoKaW50IGluaXQoaW50IHUpIHsKICAgY29tcHV0ZV9zaXplKHUsIDApOwogICB1ID0gZmluZF9jZW50cm9pZCh1LCAwLCBzc1t1XSk7CiAgIGRlbFt1XSA9IDE7CiAgIGZvcihhdXRvW3YsIHddIDogZ3JhcGhbdV0pCiAgICAgIGlmKCFkZWxbdl0gJiYgdiAhPSBwYXJbdV0pCiAgICAgICAgIGN0W3VdLnBiKGluaXQodikpOwogICAgICBlbHNlIGlmKHYgIT0gcGFyW3VdKSBjdFt1XS5wYigwKTsKICAgaWYoIWRlbFtwYXJbdV1dICYmIHUgIT0gMSkgcGFyW3VdID0gaW5pdChwYXJbdV0pOwogICByZXR1cm4gdTsKfQoKYm9vbCBjaGVjayhsbCB4LCBwYWlyPGkxMjgsIGkxMjg+IHApIHsKICAgcmV0dXJuIHggJSBwLmZpID09IHAuc2U7Cn0KCmludCB2aXNbbWF4bl0gPSB7fTsKCmludCBzcGVjaWFsX2JpbmFyeV9zZWFyY2gobGwgeCwgaW50IHJvb3QpIHsKICAgdmVjdG9yPGludD4gb3JkZXI7CiAgIGludCBhbnMgPSByb290OwogICB3aGlsZSghKGlzX2xlYWZbYW5zXSkpIHsKLy8gICAgICBhc3NlcnQoIXZpc1thbnNdKTsKLy8gICAgICBpZighYW5zKSBjb3V0IDw8IG9yZGVyLmJhY2soKSA8PCBlbmRsOwogICAgICB2aXNbYW5zXSA9IDE7CiAgICAgIG9yZGVyLnBiKGFucyk7Ci8vICAgICAgYXNzZXJ0KGFucyk7CiAgICAgIGlmKGNoZWNrKHgsIHJlcVthbnNdKSkKICAgICAgICAgYW5zID0gY3RbYW5zXVsocGF0aFthbnNdICsgeCkgJSAoaW50KGN0W2Fuc10uc2l6ZSgpKSldOwogICAgICBlbHNlIGFucyA9IHBhclthbnNdOwogICB9CiAgIGZvcihpbnQgZSA6IG9yZGVyKQogICAgICB2aXNbZV0gPSAwOwogICByZXR1cm4gYW5zOwp9Cgp2b2lkIHNvbHZlKCkgewogICBpbnQgbiwgbTsgY2luID4+IG4gPj4gbTsKICAgZm9ydShpLCAxLCBuKSBncmFwaFtpXS5jbGVhcigpLCBjdFtpXS5jbGVhcigpLCByZXFbaV0gPSB7LTEsIC0xfSwgZGVsW2ldID0gMDsKCiAgIHZlY3RvcjxwaWk+IGVkZ2VzKG4gKyAxKTsKICAgZm9ydShpLCAyLCBuKSBjaW4gPj4gZWRnZXNbaV0uZmksIHBhcltpXSA9IGVkZ2VzW2ldLmZpOwogICBmb3J1KGksIDIsIG4pIGNpbiA+PiBlZGdlc1tpXS5zZTsKICAgZm9ydShpLCAyLCBuKSBncmFwaFtlZGdlc1tpXS5maV0ucGIoe2ksIGVkZ2VzW2ldLnNlfSksCiAgICAgICAgICAgICAgICAgZ3JhcGhbaV0ucGIoe2VkZ2VzW2ldLmZpLCBlZGdlc1tpXS5zZX0pOwogICBmb3J1KGksIDIsIG4pCiAgICAgIGlzX2xlYWZbaV0gPSAoZ3JhcGhbaV0uc2l6ZSgpID09IDEpLCBzb3J0KGFsbChncmFwaFtpXSkpOwoKICAgZGZzKDEsIDAsIHsxLCAwfSk7CiAgIGludCByb290ID0gaW5pdCgxKTsKCiAgIHZlY3RvcjxpbnQ+IGFuczsKICAgd2hpbGUobS0tKSB7CiAgICAgIGxsIHg7IGNpbiA+PiB4OwogICAgICBpZihuID09IDEpCiAgICAgICAgIGFucy5wYigxKTsKICAgICAgZWxzZSBhbnMucGIoc3BlY2lhbF9iaW5hcnlfc2VhcmNoKHgsIHJvb3QpKTsKICAgfQogICBmb3IoaW50IGEgOiBhbnMpCiAgICAgIGNvdXQgPDwgYSA8PCAnICc7CiAgIGNvdXQgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CiAgIGZpbGUobmFtZSwgIi5vdXQiKTsKICAgLy9maWxlIGFuZCBpb3MgYm9vc3QKCiAgIGludCB0OyBjaW4gPj4gdDsKICAgd2hpbGUodC0tKQogICAgICBzb2x2ZSgpOwp9Cg==