#include <bits/stdc++.h>
using namespace std;
inline void read(int &X){
X=0;int w=0;char ch=0;
while(!isdigit(ch))w|=ch=='-',ch=getchar();
while( isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
X=w?-X:X;
}
inline void llread(long long &X){
X=0;int w=0;char ch=0;
while(!isdigit(ch))w|=ch=='-',ch=getchar();
while( isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
X=w?-X:X;
}
const int N=3e5+5;
int n,m;
long long A[N];
struct cqr{
int a,b,d=0;
long long c;
}B[N];
struct rqc{
long long a;
int b,c=0;
}C[N];
void zl(rqc &a){
if(a.a>=A[a.b]){
a.c++;
if(a.b==1)return;
if(B[a.b].b)a.a*=B[a.b].c;
else a.a+=B[a.b].c;
a.b=B[a.b].a;
zl(a);
}else{
B[a.b].d++;
return;
}
}
int main(){
read(n);read(m);
for(register int k=1;k<=n;k++)llread(A[k]);
for(register int k=2;k<=n;k++){
read(B[k].a);read(B[k].b);llread(B[k].c);
}
for(register int k=1;k<=m;k++){
llread(C[k].a);read(C[k].b);
zl(C[k]);
}
for(register int k=1;k<=n;k++)printf("%d\n",B[k].d);
for(register int k=1;k<=m;k++)printf("%d\n",C[k].c);
return 0;
}