#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,q;
struct node{
int x,y,z;
}e[N];
bool cmp1(node a,node b){
return a.z>b.z;
}
struct zrq{
int k,v,id;
}a[N];
bool cmp2(zrq a,zrq b){
return a.k>b.k;
}
int fa[N];
int size[N];
int ans[N];
int find(int x){
return fa[x]^x?fa[x]=find(fa[x]):x;
}
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<n;i++){
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);
}
for(int i=1;i<=n;i++){
fa[i]=i,size[i]=1;
}
sort(e+1,e+n,cmp1);
for(int i=1;i<=q;i++){
scanf("%d%d",&a[i].k,&a[i].v);
a[i].id=i;
}
sort(a+1,a+1+q,cmp2);
int l=1;
for(int i=1;i<=q;i++){
while(l<n&&e[l].z>=a[i].k){
int x=find(e[i].x),y=find(e[i].y);
if(x^y){
fa[x]=y;
size[y]+=size[x];
}
l++;
}
ans[a[i].id]=size[find(a[i].v)]-1;
}
for(int i=1;i<=q;i++){
printf("%d\n",ans[i]);
}
return 0;
}