#include <bits/stdc++.h>
using namespace std;

#define Task "last"
#define int long long
#define el '\n'
#define cnt_bit_1 __builtin_popcountll
#define float double
#define IO freopen(Task".inp","r",stdin); freopen(Task".out","w",stdout);
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back

const int N = 1000005;
const int INF = 1e18;
const int MOD = 1e9+7;

int n , q , ti = 0;
vector<pii> ke[N];
int A[N] , sz[N], par[N], dep[N], heavy[N], head[N], pos[N];
int distr[N] , wei[N], pre[N] , bA[N] , bitt[N];

void dfs(int u , int p , int d , int dist , int up)
{
    sz[u] = 1; par[u] = p; dep[u] = d; distr[u] = dist; wei[u] = up; heavy[u] = 0;
    int ms = 0;
    for(auto &edge : ke[u])
    {
        int v = edge.fi, w = edge.se;
        if(v != p)
        {
            dfs(v, u, d + 1, dist + w, w);
            sz[u] += sz[v];
            if(sz[v] > ms)
            {
                ms = sz[v];
                heavy[u] = v;
            }
        }
    }
}

void HLD(int u , int p , int h)
{
    head[u] = h;
    pos[u] = ++ti;
    pre[ti] = pre[ti - 1] + wei[u];

    if(heavy[u]) HLD(heavy[u], u, h);
    for(auto &edge : ke[u])
    {
        int v = edge.fi;
        if(v != p && v != heavy[u])
        {
            HLD(v, u, v);
        }
    }
}

void add(int idx, int val1, int val2)
{
    for(; idx <= n; idx += idx & -idx)
    {
        bA[idx] += val1;
        bitt[idx] += val2;
    }
}

void range(int L , int R , int d)
{
    add(L , d , d * pre[L - 1]);
    add(R + 1 , -d , -d * pre[R]);
}

int query1(int idx)
{
    int sum1 = 0, sum2 = 0;
    int orz = idx;
    for(; idx > 0; idx -= idx & -idx)
    {
        sum1 += bA[idx];
        sum2 += bitt[idx];
    }
    return pre[orz] * sum1 - sum2;
}

int range2(int L, int R)
{
    return query1(R) - query1(L - 1);
}

void update(int u, int d)
{
    while(u > 0)
    {
        int h = head[u];
        range(pos[h], pos[u], d);
        u = par[h];
    }
}

int query2(int u)
{
    int ans = 0;
    while(u > 0)
    {
        int h = head [u];
        ans += range2(pos[h] , pos[u]);
        u = par[h];
    }
    return ans;
}

signed main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    IO

    cin >> n >> q;

    for(int i = 1 ; i < n ; i++)
    {
        int u , v , w; cin >> u >> v >> w;
        ke[u].pb({v, w});
        ke[v].pb({u, w});
    }

    dfs(1 , 0 , 1 , 0 , 0);
    HLD(1 , 0 , 1);

    int sumA = 0 , sumAD = 0;

    q++; /// a bị lừa rồi các e ơi =))
    while(q--)
    {
        int type; cin >> type;
        if(type == 1)
        {
            int x , y; cin >> x >> y;
            int d = y - A[x];
            A[x] = y;
            sumA += d;
            sumAD += d * distr[x];
            update(x , d);
        }
        else
        {
            int x; cin >> x;
            int ans = sumA * distr[x] + sumAD - 2 * query2(x);
            cout << ans << el;
        }
    }

    return 0;
}

/// q(log * log N) - hld and fenwick sol - VOI
