#include <bits/stdc++.h>
#define Nmax 100005
#define pb push_back
#define SQRT 320
using namespace std;
int n,nr_fii[Nmax],p[Nmax],l;
int st[SQRT],dr[SQRT],cnt,val[Nmax],v[Nmax];
vector <int> L[Nmax];
struct buc
{
bitset <1000000> Viz;
int sum=0;
} Buc[SQRT];
inline void Dfs(int nod, int tata)
{
p[nod]=++l; v[l]=nod;
for(auto it : L[nod])
{
if(it==tata) continue;
Dfs(it,nod);
nr_fii[nod]+=nr_fii[it]+1;
}
}
inline void upd(int p, int x, int y, int s)
{
int i;
for(i=st[p];i<=dr[p];++i) Buc[p].Viz[val[i]]=0;
for(i=x;i<=y;++i) val[i]+=s;
for(i=st[p];i<=dr[p];++i) Buc[p].Viz[val[i]]=1;
}
int main()
{
int i,j,x,y,m,Sqrt,s,tip,nod,k;
ifstream cin("arbore.in");
ofstream cout("arbore.out");
cin>>n>>m;
for(i=1;i<n;++i)
{
cin>>x>>y;
L[x].pb(y); L[y].pb(x);
}
Dfs(1,0);
Sqrt=sqrt(1.0*n);
for(i=1;i<=n;i+=Sqrt)
{
st[++cnt]=i; dr[cnt]=min(i+Sqrt-1,n);
}
while(m--)
{
cin>>tip;
if(tip==1)
{
cin>>nod>>s;
x=p[nod]; y=p[nod]+nr_fii[nod];
for(i=1;i<=cnt && st[i]<x;++i);
for(j=max(i-1,1);j<=cnt && dr[j]<=y;++j);
--j;
for(k=i;k<=j;++k) Buc[k].sum+=s;
if(i-1) upd(i-1,x,min(y,dr[i-1]),s);
if(j+1<=cnt && (j+1!=i-1 || i==1)) upd(j+1,max(x,st[j+1]),y,s);
}
else
{
cin>>s;
for(i=1;i<=cnt;++i)
if(Buc[i].sum<=s && Buc[i].Viz[s-Buc[i].sum]) break;
if(i==cnt+1)
cout<<"-1\n";
else
{
for(j=st[i];j<=dr[i];++j)
if(val[j]==s-Buc[i].sum)
{
cout<<v[j]<<"\n";
break;
}
}
}
}
return 0;
}