#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define MASK(n) (1 << n)
#define pp pair<int,pair<int,int>>
#define PhTrNghia "TASK"
using namespace std;
const int maxn = 1e5 + 5;
const int inf = 1e18;
struct segment_tree{
struct node{
int mn, mx;
bool lazy;
node(){
mn = inf;
mx = -inf;
lazy = 0;
}
};
int n;
vector <node> tree;
segment_tree(int _n){
n = _n;
tree.assign(n << 2 | 5, node());
}
void apply(int id){
swap(tree[id].mn, tree[id].mx);
tree[id].mn *= -1;
tree[id].mx *= -1;
tree[id].lazy ^= 1;
}
void push_down(int id){
if (tree[id].lazy){
apply(id << 1);
apply(id << 1 | 1);
tree[id].lazy = 0;
}
}
void update(int id, int l, int r, int pos, int val){
if (l > pos or r < pos) return;
if (l == r){
tree[id].mn = val;
tree[id].mx = val;
return;
}
int mid = (l + r) >> 1;
push_down(id);
update(id << 1, l, mid, pos, val);
update(id << 1 | 1, mid + 1, r, pos, val);
tree[id].mn = min(tree[id << 1].mn, tree[id << 1 | 1].mn);
tree[id].mx = max(tree[id << 1].mx, tree[id << 1 | 1].mx);
}
void flip(int id, int l, int r, int u, int v){
if (l > v or r < u) return;
if (l >= u && r <= v){
apply(id);
return;
}
int mid = (l + r) >> 1;
push_down(id);
flip(id << 1, l, mid, u, v);
flip(id << 1 | 1, mid + 1, r, u, v);
tree[id].mn = min(tree[id << 1].mn, tree[id << 1 | 1].mn);
tree[id].mx = max(tree[id << 1].mx, tree[id << 1 | 1].mx);
}
int get(int id, int l, int r, int u, int v){
if (l > v or r < u) return -inf;
if (l >= u && r <= v) return tree[id].mx;
int mid = (l + r) >> 1;
push_down(id);
int get1 = get(id << 1, l, mid, u, v);
int get2 = get(id << 1 | 1, mid + 1, r, u, v);
return max(get1, get2);
}
void update(int pos, int val){
update(1, 1, n, pos, val);
}
void flip(int l, int r){
flip(1, 1, n, l, r);
}
int get(int l, int r){
return get(1, 1, n, l, r);
}
};
int n, q;
vector <pair <int, int>> g[maxn];
int sz[maxn], bigC[maxn], bigW[maxn], parent[maxn], dep[maxn], head[maxn], op[maxn], cnt = 0;
void pre_dfs(int u, int p){
sz[u] = 1;
parent[u] = p;
dep[u] = dep[p] + 1;
for (pair <int, int> cur: g[u]){
int v = cur.first;
int w = cur.second;
if (v == p) continue;
pre_dfs(v, u);
sz[u] += sz[v];
if (sz[bigC[u]] < sz[v]){
bigC[u] = v;
bigW[u] = w;
}
}
}
segment_tree smt(maxn);
void hld(int u, int p, int w, int top){
head[u] = top;
op[u] = ++cnt;
smt.update(cnt, w);
if (bigC[u]) hld(bigC[u], u, bigW[u], top);
for (pair <int, int> cur: g[u]){
int v = cur.first;
int ww = cur.second;
if (v == p or v == bigC[u]) continue;
hld(v, u, ww, v);
}
}
pair <int, int> edges[maxn];
void hld_update(int pos, int val){
int node = edges[pos].second;
smt.update(op[node], val);
}
void hld_flip(int u, int v){
while (head[u] != head[v]){
if (dep[head[u]] < dep[head[v]]) swap(u, v);
smt.flip(op[head[u]], op[u]);
u = parent[head[u]];
}
if (dep[u] > dep[v]) swap(u, v);
smt.flip(op[u] + 1, op[v]);
}
int hld_get(int u, int v){
int res = -inf;
while (head[u] != head[v]){
if (dep[head[u]] < dep[head[v]]) swap(u, v);
res = max(res, smt.get(op[head[u]], op[u]));
u = parent[head[u]];
}
if (dep[u] > dep[v]) swap(u, v);
res = max(res, smt.get(op[u] + 1, op[v]));
return res;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
if (fopen(PhTrNghia".INP", "r")){
freopen(PhTrNghia".INP", "r", stdin);
freopen(PhTrNghia".OUT", "w", stdout);
}
cin >> n >> q;
for (int i = 1; i < n; i++){
int x, y, w;
cin >> x >> y >> w;
edges[i] = {x, y};
g[x].push_back({y, w});
g[y].push_back({x, w});
}
pre_dfs(1, 0);
hld(1, 0, 0, 1);
for (int i = 1; i < n; i++){
int x = edges[i].first;
int y = edges[i].second;
if (dep[x] > dep[y]) swap(edges[i].first, edges[i].second);
}
while (q--){
string type;
cin >> type;
if (type == "CHANGE"){
int pos, val;
cin >> pos >> val;
hld_update(pos, val);
}
if (type == "NEGATE"){
int u, v;
cin >> u >> v;
hld_flip(u, v);
}
if (type == "QUERY"){
int u, v;
cin >> u >> v;
cout << hld_get(u, v) << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZyAKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBNQVNLKG4pICgxIDw8IG4pCiNkZWZpbmUgcHAgcGFpcjxpbnQscGFpcjxpbnQsaW50Pj4KI2RlZmluZSBQaFRyTmdoaWEgIlRBU0siCiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApjb25zdCBpbnQgbWF4biA9IDFlNSArIDU7CmNvbnN0IGludCBpbmYgPSAxZTE4OwoKc3RydWN0IHNlZ21lbnRfdHJlZXsKICAgIHN0cnVjdCBub2RlewogICAgICAgIGludCBtbiwgbXg7CiAgICAgICAgYm9vbCBsYXp5OwogICAgICAgIG5vZGUoKXsKICAgICAgICAgICAgbW4gPSBpbmY7CiAgICAgICAgICAgIG14ID0gLWluZjsKICAgICAgICAgICAgbGF6eSA9IDA7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgaW50IG47CiAgICB2ZWN0b3IgPG5vZGU+IHRyZWU7CiAgICBzZWdtZW50X3RyZWUoaW50IF9uKXsKICAgICAgICBuID0gX247CiAgICAgICAgdHJlZS5hc3NpZ24obiA8PCAyIHwgNSwgbm9kZSgpKTsKICAgIH0KICAgIAogICAgdm9pZCBhcHBseShpbnQgaWQpewogICAgICAgIHN3YXAodHJlZVtpZF0ubW4sIHRyZWVbaWRdLm14KTsKICAgICAgICB0cmVlW2lkXS5tbiAqPSAtMTsKICAgICAgICB0cmVlW2lkXS5teCAqPSAtMTsKICAgICAgICB0cmVlW2lkXS5sYXp5IF49IDE7CiAgICB9CiAgICAKICAgIHZvaWQgcHVzaF9kb3duKGludCBpZCl7CiAgICAgICAgaWYgKHRyZWVbaWRdLmxhenkpewogICAgICAgICAgICBhcHBseShpZCA8PCAxKTsKICAgICAgICAgICAgYXBwbHkoaWQgPDwgMSB8IDEpOwogICAgICAgICAgICB0cmVlW2lkXS5sYXp5ID0gMDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgcG9zLCBpbnQgdmFsKXsKICAgICAgICBpZiAobCA+IHBvcyBvciByIDwgcG9zKSByZXR1cm47CiAgICAgICAgaWYgKGwgPT0gcil7IAogICAgICAgICAgICB0cmVlW2lkXS5tbiA9IHZhbDsKICAgICAgICAgICAgdHJlZVtpZF0ubXggPSB2YWw7CiAgICAgICAgICAgIHJldHVybjsgCiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgcHVzaF9kb3duKGlkKTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSwgbCwgbWlkLCBwb3MsIHZhbCk7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCBwb3MsIHZhbCk7CiAgICAgICAgdHJlZVtpZF0ubW4gPSBtaW4odHJlZVtpZCA8PCAxXS5tbiwgdHJlZVtpZCA8PCAxIHwgMV0ubW4pOwogICAgICAgIHRyZWVbaWRdLm14ID0gbWF4KHRyZWVbaWQgPDwgMV0ubXgsIHRyZWVbaWQgPDwgMSB8IDFdLm14KTsKICAgIH0KICAgIAogICAgdm9pZCBmbGlwKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpewogICAgICAgIGlmIChsID4gdiBvciByIDwgdSkgcmV0dXJuOwogICAgICAgIGlmIChsID49IHUgJiYgciA8PSB2KXsKICAgICAgICAgICAgYXBwbHkoaWQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgcHVzaF9kb3duKGlkKTsKICAgICAgICBmbGlwKGlkIDw8IDEsIGwsIG1pZCwgdSwgdik7CiAgICAgICAgZmxpcChpZCA8PCAxIHwgMSwgbWlkICsgMSwgciwgdSwgdik7CiAgICAgICAgdHJlZVtpZF0ubW4gPSBtaW4odHJlZVtpZCA8PCAxXS5tbiwgdHJlZVtpZCA8PCAxIHwgMV0ubW4pOwogICAgICAgIHRyZWVbaWRdLm14ID0gbWF4KHRyZWVbaWQgPDwgMV0ubXgsIHRyZWVbaWQgPDwgMSB8IDFdLm14KTsKICAgIH0KICAgIAogICAgaW50IGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KXsKICAgICAgICBpZiAobCA+IHYgb3IgciA8IHUpIHJldHVybiAtaW5mOwogICAgICAgIGlmIChsID49IHUgJiYgciA8PSB2KSByZXR1cm4gdHJlZVtpZF0ubXg7CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICBwdXNoX2Rvd24oaWQpOwogICAgICAgIGludCBnZXQxID0gZ2V0KGlkIDw8IDEsIGwsIG1pZCwgdSwgdik7CiAgICAgICAgaW50IGdldDIgPSBnZXQoaWQgPDwgMSB8IDEsIG1pZCArIDEsIHIsIHUsIHYpOwogICAgICAgIHJldHVybiBtYXgoZ2V0MSwgZ2V0Mik7CiAgICB9CiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpewogICAgICAgIHVwZGF0ZSgxLCAxLCBuLCBwb3MsIHZhbCk7CiAgICB9CiAgICAKICAgIHZvaWQgZmxpcChpbnQgbCwgaW50IHIpewogICAgICAgIGZsaXAoMSwgMSwgbiwgbCwgcik7CiAgICB9ICAgIAogICAgCiAgICBpbnQgZ2V0KGludCBsLCBpbnQgcil7CiAgICAgICAgcmV0dXJuIGdldCgxLCAxLCBuLCBsLCByKTsKICAgIH0KfTsKCmludCBuLCBxOwp2ZWN0b3IgPHBhaXIgPGludCwgaW50Pj4gZ1ttYXhuXTsKaW50IHN6W21heG5dLCBiaWdDW21heG5dLCBiaWdXW21heG5dLCBwYXJlbnRbbWF4bl0sIGRlcFttYXhuXSwgaGVhZFttYXhuXSwgb3BbbWF4bl0sIGNudCA9IDA7Cgp2b2lkIHByZV9kZnMoaW50IHUsIGludCBwKXsKICAgIHN6W3VdID0gMTsKICAgIHBhcmVudFt1XSA9IHA7CiAgICBkZXBbdV0gPSBkZXBbcF0gKyAxOwogICAgZm9yIChwYWlyIDxpbnQsIGludD4gY3VyOiBnW3VdKXsKICAgICAgICBpbnQgdiA9IGN1ci5maXJzdDsKICAgICAgICBpbnQgdyA9IGN1ci5zZWNvbmQ7CiAgICAgICAgaWYgKHYgPT0gcCkgY29udGludWU7CiAgICAgICAgcHJlX2Rmcyh2LCB1KTsKICAgICAgICBzelt1XSArPSBzelt2XTsKICAgICAgICBpZiAoc3pbYmlnQ1t1XV0gPCBzelt2XSl7IAogICAgICAgICAgICBiaWdDW3VdID0gdjsKICAgICAgICAgICAgYmlnV1t1XSA9IHc7CiAgICAgICAgfSAgICAKICAgIH0KfQoKc2VnbWVudF90cmVlIHNtdChtYXhuKTsKCnZvaWQgaGxkKGludCB1LCBpbnQgcCwgaW50IHcsIGludCB0b3ApewogICAgaGVhZFt1XSA9IHRvcDsKICAgIG9wW3VdID0gKytjbnQ7CiAgICBzbXQudXBkYXRlKGNudCwgdyk7CiAgICAKICAgIGlmIChiaWdDW3VdKSBobGQoYmlnQ1t1XSwgdSwgYmlnV1t1XSwgdG9wKTsKICAgIAogICAgZm9yIChwYWlyIDxpbnQsIGludD4gY3VyOiBnW3VdKXsKICAgICAgICBpbnQgdiA9IGN1ci5maXJzdDsKICAgICAgICBpbnQgd3cgPSBjdXIuc2Vjb25kOwogICAgICAgIGlmICh2ID09IHAgb3IgdiA9PSBiaWdDW3VdKSBjb250aW51ZTsKICAgICAgICBobGQodiwgdSwgd3csIHYpOwogICAgfQp9CgpwYWlyIDxpbnQsIGludD4gZWRnZXNbbWF4bl07Cgp2b2lkIGhsZF91cGRhdGUoaW50IHBvcywgaW50IHZhbCl7CiAgICBpbnQgbm9kZSA9IGVkZ2VzW3Bvc10uc2Vjb25kOwogICAgc210LnVwZGF0ZShvcFtub2RlXSwgdmFsKTsKfQoKdm9pZCBobGRfZmxpcChpbnQgdSwgaW50IHYpewogICAgd2hpbGUgKGhlYWRbdV0gIT0gaGVhZFt2XSl7CiAgICAgICAgaWYgKGRlcFtoZWFkW3VdXSA8IGRlcFtoZWFkW3ZdXSkgc3dhcCh1LCB2KTsKICAgICAgICBzbXQuZmxpcChvcFtoZWFkW3VdXSwgb3BbdV0pOwogICAgICAgIHUgPSBwYXJlbnRbaGVhZFt1XV07CiAgICB9CiAgICBpZiAoZGVwW3VdID4gZGVwW3ZdKSBzd2FwKHUsIHYpOwogICAgc210LmZsaXAob3BbdV0gKyAxLCBvcFt2XSk7Cn0KCmludCBobGRfZ2V0KGludCB1LCBpbnQgdil7CiAgICBpbnQgcmVzID0gLWluZjsKICAgIHdoaWxlIChoZWFkW3VdICE9IGhlYWRbdl0pewogICAgICAgIGlmIChkZXBbaGVhZFt1XV0gPCBkZXBbaGVhZFt2XV0pIHN3YXAodSwgdik7CiAgICAgICAgcmVzID0gbWF4KHJlcywgc210LmdldChvcFtoZWFkW3VdXSwgb3BbdV0pKTsKICAgICAgICB1ID0gcGFyZW50W2hlYWRbdV1dOwogICAgfQogICAgaWYgKGRlcFt1XSA+IGRlcFt2XSkgc3dhcCh1LCB2KTsKICAgIHJlcyA9IG1heChyZXMsIHNtdC5nZXQob3BbdV0gKyAxLCBvcFt2XSkpOwogICAgcmV0dXJuIHJlczsKfQoKc2lnbmVkIG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oUGhUck5naGlhIi5JTlAiLCAiciIpKXsKICAgICAgICBmcmVvcGVuKFBoVHJOZ2hpYSIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihQaFRyTmdoaWEiLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIAogICAgY2luID4+IG4gPj4gcTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBpbnQgeCwgeSwgdzsKICAgICAgICBjaW4gPj4geCA+PiB5ID4+IHc7CiAgICAgICAgZWRnZXNbaV0gPSB7eCwgeX07CiAgICAgICAgZ1t4XS5wdXNoX2JhY2soe3ksIHd9KTsKICAgICAgICBnW3ldLnB1c2hfYmFjayh7eCwgd30pOwogICAgfQogICAgCiAgICBwcmVfZGZzKDEsIDApOwogICAgaGxkKDEsIDAsIDAsIDEpOwogICAgCiAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKyl7CiAgICAgICAgaW50IHggPSBlZGdlc1tpXS5maXJzdDsKICAgICAgICBpbnQgeSA9IGVkZ2VzW2ldLnNlY29uZDsKICAgICAgICBpZiAoZGVwW3hdID4gZGVwW3ldKSBzd2FwKGVkZ2VzW2ldLmZpcnN0LCBlZGdlc1tpXS5zZWNvbmQpOwogICAgfQogICAgCiAgICB3aGlsZSAocS0tKXsKICAgICAgICBzdHJpbmcgdHlwZTsKICAgICAgICBjaW4gPj4gdHlwZTsKICAgICAgICBpZiAodHlwZSA9PSAiQ0hBTkdFIil7CiAgICAgICAgICAgIGludCBwb3MsIHZhbDsKICAgICAgICAgICAgY2luID4+IHBvcyA+PiB2YWw7CiAgICAgICAgICAgIGhsZF91cGRhdGUocG9zLCB2YWwpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAodHlwZSA9PSAiTkVHQVRFIil7CiAgICAgICAgICAgIGludCB1LCB2OwogICAgICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgICAgICBobGRfZmxpcCh1LCB2KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHR5cGUgPT0gIlFVRVJZIil7CiAgICAgICAgICAgIGludCB1LCB2OwogICAgICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgICAgICBjb3V0IDw8IGhsZF9nZXQodSwgdikgPDwgZW5kbDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9