#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
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIFRhc2sgImxhc3QiCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGVsICdcbicKI2RlZmluZSBjbnRfYml0XzEgX19idWlsdGluX3BvcGNvdW50bGwKI2RlZmluZSBmbG9hdCBkb3VibGUKI2RlZmluZSBJTyBmcmVvcGVuKFRhc2siLmlucCIsInIiLHN0ZGluKTsgZnJlb3BlbihUYXNrIi5vdXQiLCJ3IixzdGRvdXQpOwojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKCmNvbnN0IGludCBOID0gMTAwMDAwNTsKY29uc3QgaW50IElORiA9IDFlMTg7CmNvbnN0IGludCBNT0QgPSAxZTkrNzsKCmludCBuICwgcSAsIHRpID0gMDsKdmVjdG9yPHBpaT4ga2VbTl07CmludCBBW05dICwgc3pbTl0sIHBhcltOXSwgZGVwW05dLCBoZWF2eVtOXSwgaGVhZFtOXSwgcG9zW05dOwppbnQgZGlzdHJbTl0gLCB3ZWlbTl0sIHByZVtOXSAsIGJBW05dICwgYml0dFtOXTsKCnZvaWQgZGZzKGludCB1ICwgaW50IHAgLCBpbnQgZCAsIGludCBkaXN0ICwgaW50IHVwKQp7CiAgICBzelt1XSA9IDE7IHBhclt1XSA9IHA7IGRlcFt1XSA9IGQ7IGRpc3RyW3VdID0gZGlzdDsgd2VpW3VdID0gdXA7IGhlYXZ5W3VdID0gMDsKICAgIGludCBtcyA9IDA7CiAgICBmb3IoYXV0byAmZWRnZSA6IGtlW3VdKQogICAgewogICAgICAgIGludCB2ID0gZWRnZS5maSwgdyA9IGVkZ2Uuc2U7CiAgICAgICAgaWYodiAhPSBwKQogICAgICAgIHsKICAgICAgICAgICAgZGZzKHYsIHUsIGQgKyAxLCBkaXN0ICsgdywgdyk7CiAgICAgICAgICAgIHN6W3VdICs9IHN6W3ZdOwogICAgICAgICAgICBpZihzelt2XSA+IG1zKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtcyA9IHN6W3ZdOwogICAgICAgICAgICAgICAgaGVhdnlbdV0gPSB2OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIEhMRChpbnQgdSAsIGludCBwICwgaW50IGgpCnsKICAgIGhlYWRbdV0gPSBoOwogICAgcG9zW3VdID0gKyt0aTsKICAgIHByZVt0aV0gPSBwcmVbdGkgLSAxXSArIHdlaVt1XTsKCiAgICBpZihoZWF2eVt1XSkgSExEKGhlYXZ5W3VdLCB1LCBoKTsKICAgIGZvcihhdXRvICZlZGdlIDoga2VbdV0pCiAgICB7CiAgICAgICAgaW50IHYgPSBlZGdlLmZpOwogICAgICAgIGlmKHYgIT0gcCAmJiB2ICE9IGhlYXZ5W3VdKQogICAgICAgIHsKICAgICAgICAgICAgSExEKHYsIHUsIHYpOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBhZGQoaW50IGlkeCwgaW50IHZhbDEsIGludCB2YWwyKQp7CiAgICBmb3IoOyBpZHggPD0gbjsgaWR4ICs9IGlkeCAmIC1pZHgpCiAgICB7CiAgICAgICAgYkFbaWR4XSArPSB2YWwxOwogICAgICAgIGJpdHRbaWR4XSArPSB2YWwyOwogICAgfQp9Cgp2b2lkIHJhbmdlKGludCBMICwgaW50IFIgLCBpbnQgZCkKewogICAgYWRkKEwgLCBkICwgZCAqIHByZVtMIC0gMV0pOwogICAgYWRkKFIgKyAxICwgLWQgLCAtZCAqIHByZVtSXSk7Cn0KCmludCBxdWVyeTEoaW50IGlkeCkKewogICAgaW50IHN1bTEgPSAwLCBzdW0yID0gMDsKICAgIGludCBvcnogPSBpZHg7CiAgICBmb3IoOyBpZHggPiAwOyBpZHggLT0gaWR4ICYgLWlkeCkKICAgIHsKICAgICAgICBzdW0xICs9IGJBW2lkeF07CiAgICAgICAgc3VtMiArPSBiaXR0W2lkeF07CiAgICB9CiAgICByZXR1cm4gcHJlW29yel0gKiBzdW0xIC0gc3VtMjsKfQoKaW50IHJhbmdlMihpbnQgTCwgaW50IFIpCnsKICAgIHJldHVybiBxdWVyeTEoUikgLSBxdWVyeTEoTCAtIDEpOwp9Cgp2b2lkIHVwZGF0ZShpbnQgdSwgaW50IGQpCnsKICAgIHdoaWxlKHUgPiAwKQogICAgewogICAgICAgIGludCBoID0gaGVhZFt1XTsKICAgICAgICByYW5nZShwb3NbaF0sIHBvc1t1XSwgZCk7CiAgICAgICAgdSA9IHBhcltoXTsKICAgIH0KfQoKaW50IHF1ZXJ5MihpbnQgdSkKewogICAgaW50IGFucyA9IDA7CiAgICB3aGlsZSh1ID4gMCkKICAgIHsKICAgICAgICBpbnQgaCA9IGhlYWQgW3VdOwogICAgICAgIGFucyArPSByYW5nZTIocG9zW2hdICwgcG9zW3VdKTsKICAgICAgICB1ID0gcGFyW2hdOwogICAgfQogICAgcmV0dXJuIGFuczsKfQoKc2lnbmVkIG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIElPCgogICAgY2luID4+IG4gPj4gcTsKCiAgICBmb3IoaW50IGkgPSAxIDsgaSA8IG4gOyBpKyspCiAgICB7CiAgICAgICAgaW50IHUgLCB2ICwgdzsgY2luID4+IHUgPj4gdiA+PiB3OwogICAgICAgIGtlW3VdLnBiKHt2LCB3fSk7CiAgICAgICAga2Vbdl0ucGIoe3UsIHd9KTsKICAgIH0KCiAgICBkZnMoMSAsIDAgLCAxICwgMCAsIDApOwogICAgSExEKDEgLCAwICwgMSk7CgogICAgaW50IHN1bUEgPSAwICwgc3VtQUQgPSAwOwoKICAgIHErKzsgLy8vIGEgYuG7iyBs4burYSBy4buTaSBjw6FjIGUgxqFpID0pKQogICAgd2hpbGUocS0tKQogICAgewogICAgICAgIGludCB0eXBlOyBjaW4gPj4gdHlwZTsKICAgICAgICBpZih0eXBlID09IDEpCiAgICAgICAgewogICAgICAgICAgICBpbnQgeCAsIHk7IGNpbiA+PiB4ID4+IHk7CiAgICAgICAgICAgIGludCBkID0geSAtIEFbeF07CiAgICAgICAgICAgIEFbeF0gPSB5OwogICAgICAgICAgICBzdW1BICs9IGQ7CiAgICAgICAgICAgIHN1bUFEICs9IGQgKiBkaXN0clt4XTsKICAgICAgICAgICAgdXBkYXRlKHggLCBkKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaW50IHg7IGNpbiA+PiB4OwogICAgICAgICAgICBpbnQgYW5zID0gc3VtQSAqIGRpc3RyW3hdICsgc3VtQUQgLSAyICogcXVlcnkyKHgpOwogICAgICAgICAgICBjb3V0IDw8IGFucyA8PCBlbDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCi8vLyBxKGxvZyAqIGxvZyBOKSAtIGhsZCBhbmQgZmVud2ljayBzb2wgLSBWT0kK