#include<bits/stdc++.h>
using namespace std;
int n,q,cnt=0,size[100005];
pair<int,int> k[100005];
int fa[100005];
struct node {
int a,b,c;
}e[100005];
int ans[100005];
map<pair<int,int>,int> pos;
void build() {
for(int i=1;i<=n;++i) fa[i]=i,size[i]=1;
}
int find(int x) {
if(fa[x]==x) return x;
else {
return fa[x]=find(fa[x]);
}
}
void merge(int x,int y) {
int fax=find(x),fay=find(y);
if(fax!=fay) {
fa[fay]=fax;
size[fax]+=size[fay];
}
}
bool cmp(pair<int,int> x,pair<int,int> y){
return x.first>y.first;
}
bool cmpp(node x,node y) {
return x.c>y.c;
}
int main(){
cin>>n>>q;
build();
for(int i=1;i<n;++i) {
cin>>e[i].a>>e[i].b>>e[i].c;
}
for(int i=1;i<=q;++i) {
cin>>k[i].first>>k[i].second;
pos[k[i]]=i;
}
sort(e+1,e+n,cmpp);
sort(k+1,k+q+1,cmp);
int it=1;
for(int i=1;i<=q;++i) {
int lim=k[i].first,v=k[i].second;
while(it<=n&&e[it].c>=lim){
merge(find(e[it].a),find(e[it].b));
it++;
}
ans[pos[k[i]]]=size[find(v)]-1;
}
for(int i=1;i<=q;++i) cout<<ans[i]<<'\n';
return 0;
}