#include<bits/stdc++.h>
#define REP(i,n)        for(ll i=0;i<n;i++)
#define ll              long long
using namespace std;
#define MAX            100011

ll upd[MAX],val[MAX];
vector <ll> parent(MAX);
vector <set<ll> > child(MAX);


ll cost(ll node, ll sofar,ll curr)
{
    if(node==0)
        return curr;

    ll ret=val[node]+curr;

    if(upd[node]>0)
    {
        ret+=upd[node]*sofar;

        //Push update value to val and children
        val[node]+=upd[node];
        for(auto it = child[node].begin();it!=child[node].end();it++)
            upd[*it]+=upd[node];
        upd[node] = 0;
    }

    return cost(parent[node],sofar+1,ret);
}

int main()
{
    ios_base::sync_with_stdio(0);
    std::cin.tie(nullptr);
    ll n,m,a,x,y;
    cin>>n>>m;
    REP(i,n-1)
    {
        cin>>x>>y;
        child[x].insert(y);
        parent[y] = x;
    }

    parent[1]=0;
    REP(i,m)
    {
//        cout<<"Query: "<<i+1<<": \n";
        cin>>a;
        assert(a==2 || a==1);
        if(a==1)
        {
            cin>>x>>y;
            upd[x]+=y;
        }
        else
        {
            cin>>y;
            cout<<cost(y,1,0)<<endl;
        }
    }
}
