#include <bits/stdc++.h>
#define MAXN 1001000
using namespace std;
int n,q,far,fa[MAXN],dis[MAXN],vis[MAXN];
vector <int> G[MAXN];
inline int read(){
register int s=0,w=1;
register char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
w=-1;
ch=getchar();
}
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
inline void add(int u,int v)
{
G[u].push_back(v);
G[v].push_back(u);
}
inline bool dfs(int u,int f,int k)
{
fa[u]=f;
if(dis[u]>dis[far])
far=u;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i],w=1;
if(v==f || vis[v])
continue;
dis[v]=dis[u]+1;
dfs(v,u,k);
}
return dis[far]<k;
}
inline int DFS(int u,int f,int k)
{
if(dis[far]==k)
return far;
fa[u]=f;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(v==f || vis[v])
continue;
dis[v]=dis[u]+1;
dfs(v,u,k);
}
}
int main()
{
n=read();q=read();
for(register int i=1;i<=n-1;i++)
{
int u,v;
u=read();v=read();
add(u,v);
}
while(q--)
{
int x,k;
x=read();k=read();
dis[x]=0;
if(k==0)
printf("%d\n",x);
else if(dfs(x,0,k))
printf("%d\n",-1);
else
printf("%d\n",DFS(x,0,k));
}
return 0;
}