#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#include <vector>
const int ni = 2e6;
int n, m;
struct knight {
int c, i, die;
long long s;
int l, r, f, dist;
long long mul, add, dea;
} kn[ni];
struct city {
long long h, v;
int f, a, rt, die;
} ct[ni];
vector<int> touch[ni], son[ni];
void solve();
int add(int a, int b);
void pushdown(int a);
int main() {
solve();
return 0;
}
void solve() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%lld", &ct[i].h);
for (int i = 2; i <= n; i++) {
int a, b;
long long c;
scanf("%d%d%lld", &a, &b, &c);
ct[i].f = a;
ct[i].a = b;
ct[i].v = c;
son[a].push_back(i);
}
for (int i = 1; i <= m; i++) {
long long a;
int b;
scanf("%lld%d", &a, &b);
kn[i].s = a;
kn[i].c = b;
kn[i].i = i;
kn[i].mul = 0;
touch[b].push_back(i);
}
// printf("ggbond");
for (int g = n; g >= 1; g--) {
// printf("--- %d ---\n",g);
int &rt = ct[g].rt;
city &u = ct[g];
for (int j : touch[g]) rt = add(rt, j);
for (int j : son[g]) rt = add(rt, ct[j].rt);
// printf("[%d %lld %d %lld]",rt,v.s,u.a,u.v);
// printf("[%d %lld %lld]\n",rt,kn[rt].s,u.h);
while (rt && u.h > kn[rt].s) {
// printf("<- %lld ->",kn[rt].s);
rt = add(kn[rt].l, kn[rt].r);
u.die++;
// printf("[%d %lld %lld]\n",rt,kn[rt].s,u.h);
}
knight &v = kn[rt];
v.die++;
v.dea++;
if (u.a == 0)
v.add += u.v, v.s += u.v;
else
v.add *= u.v, v.mul *= u.v, v.s *= u.v;
pushdown(rt);
}
for (int i = 1; i <= n; i++) printf("%d\n", ct[i].die);
for (int i = 1; i <= m; i++) printf("%d\n", kn[i].die);
}
int add(int a, int b) {
// printf("<%d %d>\n",a,b);
if (a == 0 || b == 0)
return a + b;
pushdown(a);
pushdown(b);
if (kn[a].s > kn[b].s) {
int c = a;
a = b;
b = c;
}
knight &u = kn[a];
u.r = add(u.r, b);
if (kn[u.l].dist < kn[u.r].dist) {
int z = u.l;
u.l = u.r;
u.r = z;
}
u.dist = kn[u.r].dist + 1;
return a;
}
void pushdown(int a) {
knight &u = kn[a];
if (u.mul == 1 && u.add == 0)
return;
knight &l = kn[u.l], &r = kn[u.r];
l.dea += u.dea;
l.die += u.dea;
r.dea += u.dea;
r.die += u.dea;
l.add *= u.mul;
l.add += u.add;
r.add *= u.mul;
r.add += u.add;
l.s *= u.mul;
l.mul *= u.mul;
r.s *= u.mul;
r.mul *= u.mul;
l.s += u.add;
r.s += u.add;
u.add = 0, u.mul = 1, u.dea = 0;
}