#include <bits/stdc++.h>

using namespace std;
int n,q;
vector<int>g[200005];
int sz[200005];
void dfs(int u,int pa) {
    sz[u]=1;
    for(auto v:g[u])if(v!=pa) {
            dfs(v,u);
            sz[u]+=sz[v];
        }
}
vector<pair<int,int>>vec[200005];
int tree[200005];
void upd(int id,int val) {
    while(id<=n)tree[id]+=val,id+=(id&(-id));
}
int get(int id) {
    int sum=0;
    while(id>0)sum+=tree[id],id-=(id&(-id));
    return sum;
}
int ans[200005];
void dfs_ans(int u,int pa) {
    for(auto[k,id]:vec[u]) {
        ans[id]=get(k);
    }
    for(auto v:g[u])if(v!=pa) {
            upd(sz[v],-1);
            upd(n-sz[v],1);
            dfs_ans(v,u);
            upd(sz[v],1);
            upd(n-sz[v],-1);
        }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>q;
    for(int i=1; i<n; i++) {
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1,0);
    for(int i=1; i<=q; i++) {
        int u,k;
        cin>>u>>k;
        vec[u].push_back({k,i});
    }
    for(int i=1;i<=n;i++)upd(sz[i],1);
    dfs_ans(1,0);
    for(int i=1;i<=q;i++)cout<<ans[i]<<'\n';
    return 0;
}
