RT,T238762 调了好久了,fread等等都试过了,一个点就是死活卡不过去 qwq
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define mkp make_pair
#define pii pair<int,int>
#define fi first
#define se second
#define lll __int128
#define ll long long
#define For(i,j,k) for(int i=(j); i<=(k); ++i)
#define ForDown(i,j,k) for(int i=(j); i>=(k); --i)
#define pb push_back
#define FileIO(filename) freopen(filename ".in" ,"r",stdin);freopen(filename ".out" ,"w",stdout)
#define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
template<typename T>
il void read(T &x){ x=0;int f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}x*=f;}
template<typename T, typename ... Args>
il void read(T &x, Args &... y){ read(x);read(y...); }
int n,q;
const int MAXN=2e6+5;
vector<int> T[MAXN];
vector<pii> qry[MAXN];
int ans[MAXN],dep[MAXN],st[MAXN],top=0;
int dfs1(int x, int pre)
{
dep[x]=dep[pre]+1;
int res=x;
for(int v: T[x])
{
if(v==pre) continue;
int tmp=dfs1(v,x);
if(dep[tmp]>dep[res]) res=tmp;
}
// cerr<<x<<' '<<res<<endl;
return res;
}
void dfs2(int x, int pre)
{
st[++top]=x;
for(pii qr: qry[x])
{
if(top>qr.fi) ans[qr.se]=st[top-qr.fi];
}
for(int v: T[x]) if(v!=pre) dfs2(v,x);
st[top--]=0;
}
signed main()
{
read(n,q);
For(i,1,n-1)
{
int u,v; read(u,v);
T[u].pb(v); T[v].pb(u);
}
For(cnt,1,q)
{
int x,k; read(x,k);
qry[x].pb(mkp(k,cnt));
}
// memset(dep,0,sizeof(dep));
int u=dfs1(1,1); // cerr<<endl; For(i,1,n) cerr<<dep[i]<<endl;
memset(dep,0,sizeof(dep));
int v=dfs1(u,u);
// cerr<<u<<' '<<v<<endl;
// memset(ans,-1,sizeof(ans));
top=0,dfs2(u,u); top=0,dfs2(v,v);
For(i,1,q) printf("%d\n",ans[i]==0?-1:ans[i]);
return 0;
}