#include <bits/stdc++.h>
using namespace std;
using ll = long long;
static const ll NEG = -(1LL << 60);
static const int MOD = 998244353;
static const int s = 6; // 3 regex states * 2 bits prev-selected
struct cell {
ll val;
int cnt;
};
struct mat {
cell a[s][s];
};
int n, q;
vector<ll> a;
vector<int> col;
int id(int r, int p) {
return r * 2 + p;
}
int go[3][3];
cell make_cell(ll v = NEG, int c = 0) {
return {v, c};
}
void relax(cell &x, ll v, int c) {
if (c == 0) return;
if (v > x.val) {
x.val = v;
x.cnt = c;
} else if (v == x.val) {
x.cnt += c;
if (x.cnt >= MOD) x.cnt -= MOD;
}
}
mat identity_mat() {
mat m;
for (int i = 0; i < s; ++i) {
for (int j = 0; j < s; ++j) m.a[i][j] = make_cell();
m.a[i][i] = {0, 1};
}
return m;
}
mat leaf_mat(ll val, int c) {
mat m;
for (int i = 0; i < s; ++i) {
for (int j = 0; j < s; ++j) m.a[i][j] = make_cell();
}
for (int r = 0; r < 3; ++r) {
for (int p = 0; p < 2; ++p) {
int from = id(r, p);
// skip current position
int to_skip = id(r, 0);
relax(m.a[from][to_skip], 0, 1);
// take current position
if (p == 0) {
int nr = go[r][c];
if (nr != -1) {
int to_take = id(nr, 1);
relax(m.a[from][to_take], val, 1);
}
}
}
}
return m;
}
mat merge_mat(const mat &l, const mat &r) {
mat res;
for (int i = 0; i < s; ++i) {
for (int j = 0; j < s; ++j) res.a[i][j] = make_cell();
}
for (int i = 0; i < s; ++i) {
for (int k = 0; k < s; ++k) {
if (l.a[i][k].cnt == 0) continue;
for (int j = 0; j < s; ++j) {
if (r.a[k][j].cnt == 0) continue;
ll nv = l.a[i][k].val + r.a[k][j].val;
int nc = int((1LL * l.a[i][k].cnt * r.a[k][j].cnt) % MOD);
relax(res.a[i][j], nv, nc);
}
}
}
return res;
}
struct segtree {
int sz;
vector<mat> st;
segtree() {}
segtree(int n) { init(n); }
void init(int n) {
sz = 1;
while (sz < n) sz <<= 1;
st.assign(sz << 1, identity_mat());
}
void build(const vector<ll> &arr, const vector<int> &c) {
int n = (int)arr.size() - 1;
for (int i = 0; i < n; ++i) st[sz + i] = leaf_mat(arr[i + 1], c[i + 1]);
for (int i = sz - 1; i >= 1; --i) st[i] = merge_mat(st[i << 1], st[i << 1 | 1]);
}
void update_val(int pos, ll val, int c) {
int p = sz + pos - 1;
st[p] = leaf_mat(val, c);
for (p >>= 1; p; p >>= 1) st[p] = merge_mat(st[p << 1], st[p << 1 | 1]);
}
void update_col(int pos, ll val, int c) {
update_val(pos, val, c);
}
pair<ll, int> answer() const {
int start = id(0, 0);
ll best = NEG;
int ways = 0;
for (int t = 0; t < s; ++t) {
const cell &x = st[1].a[start][t];
if (x.cnt == 0) continue;
if (x.val > best) {
best = x.val;
ways = x.cnt;
} else if (x.val == best) {
ways += x.cnt;
if (ways >= MOD) ways -= MOD;
}
}
return {best, ways};
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
go[0][0] = 0;
go[0][1] = 1;
go[0][2] = -1;
go[1][0] = 2;
go[1][1] = 1;
go[1][2] = -1;
go[2][0] = 2;
go[2][1] = -1;
go[2][2] = -1;
cin >> n >> q;
a.assign(n + 1, 0);
col.assign(n + 1, 0);
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int i = 1; i <= n; ++i) cin >> col[i];
segtree st(n);
st.build(a, col);
while (q--) {
int tp;
cin >> tp;
if (tp == 1) {
int x;
ll y;
cin >> x >> y;
a[x] = y;
st.update_val(x, a[x], col[x]);
} else if (tp == 2) {
int x, y;
cin >> x >> y;
col[x] = y;
st.update_col(x, a[x], col[x]);
} else {
auto [mx, ways] = st.answer();
cout << mx << ' ' << ways << '\n';
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCnN0YXRpYyBjb25zdCBsbCBORUcgPSAtKDFMTCA8PCA2MCk7CnN0YXRpYyBjb25zdCBpbnQgTU9EID0gOTk4MjQ0MzUzOwpzdGF0aWMgY29uc3QgaW50IHMgPSA2OyAvLyAzIHJlZ2V4IHN0YXRlcyAqIDIgYml0cyBwcmV2LXNlbGVjdGVkCgpzdHJ1Y3QgY2VsbCB7CiAgICBsbCB2YWw7CiAgICBpbnQgY250Owp9OwoKc3RydWN0IG1hdCB7CiAgICBjZWxsIGFbc11bc107Cn07CgppbnQgbiwgcTsKdmVjdG9yPGxsPiBhOwp2ZWN0b3I8aW50PiBjb2w7CgppbnQgaWQoaW50IHIsIGludCBwKSB7CiAgICByZXR1cm4gciAqIDIgKyBwOwp9CgppbnQgZ29bM11bM107CgpjZWxsIG1ha2VfY2VsbChsbCB2ID0gTkVHLCBpbnQgYyA9IDApIHsKICAgIHJldHVybiB7diwgY307Cn0KCnZvaWQgcmVsYXgoY2VsbCAmeCwgbGwgdiwgaW50IGMpIHsKICAgIGlmIChjID09IDApIHJldHVybjsKICAgIGlmICh2ID4geC52YWwpIHsKICAgICAgICB4LnZhbCA9IHY7CiAgICAgICAgeC5jbnQgPSBjOwogICAgfSBlbHNlIGlmICh2ID09IHgudmFsKSB7CiAgICAgICAgeC5jbnQgKz0gYzsKICAgICAgICBpZiAoeC5jbnQgPj0gTU9EKSB4LmNudCAtPSBNT0Q7CiAgICB9Cn0KCm1hdCBpZGVudGl0eV9tYXQoKSB7CiAgICBtYXQgbTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgczsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzOyArK2opIG0uYVtpXVtqXSA9IG1ha2VfY2VsbCgpOwogICAgICAgIG0uYVtpXVtpXSA9IHswLCAxfTsKICAgIH0KICAgIHJldHVybiBtOwp9CgptYXQgbGVhZl9tYXQobGwgdmFsLCBpbnQgYykgewogICAgbWF0IG07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHM7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgczsgKytqKSBtLmFbaV1bal0gPSBtYWtlX2NlbGwoKTsKICAgIH0KCiAgICBmb3IgKGludCByID0gMDsgciA8IDM7ICsrcikgewogICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgMjsgKytwKSB7CiAgICAgICAgICAgIGludCBmcm9tID0gaWQociwgcCk7CgogICAgICAgICAgICAvLyBza2lwIGN1cnJlbnQgcG9zaXRpb24KICAgICAgICAgICAgaW50IHRvX3NraXAgPSBpZChyLCAwKTsKICAgICAgICAgICAgcmVsYXgobS5hW2Zyb21dW3RvX3NraXBdLCAwLCAxKTsKCiAgICAgICAgICAgIC8vIHRha2UgY3VycmVudCBwb3NpdGlvbgogICAgICAgICAgICBpZiAocCA9PSAwKSB7CiAgICAgICAgICAgICAgICBpbnQgbnIgPSBnb1tyXVtjXTsKICAgICAgICAgICAgICAgIGlmIChuciAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgIGludCB0b190YWtlID0gaWQobnIsIDEpOwogICAgICAgICAgICAgICAgICAgIHJlbGF4KG0uYVtmcm9tXVt0b190YWtlXSwgdmFsLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBtOwp9CgptYXQgbWVyZ2VfbWF0KGNvbnN0IG1hdCAmbCwgY29uc3QgbWF0ICZyKSB7CiAgICBtYXQgcmVzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHM7ICsraikgcmVzLmFbaV1bal0gPSBtYWtlX2NlbGwoKTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHM7ICsraSkgewogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgczsgKytrKSB7CiAgICAgICAgICAgIGlmIChsLmFbaV1ba10uY250ID09IDApIGNvbnRpbnVlOwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHM7ICsraikgewogICAgICAgICAgICAgICAgaWYgKHIuYVtrXVtqXS5jbnQgPT0gMCkgY29udGludWU7CiAgICAgICAgICAgICAgICBsbCBudiA9IGwuYVtpXVtrXS52YWwgKyByLmFba11bal0udmFsOwogICAgICAgICAgICAgICAgaW50IG5jID0gaW50KCgxTEwgKiBsLmFbaV1ba10uY250ICogci5hW2tdW2pdLmNudCkgJSBNT0QpOwogICAgICAgICAgICAgICAgcmVsYXgocmVzLmFbaV1bal0sIG52LCBuYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlczsKfQoKc3RydWN0IHNlZ3RyZWUgewogICAgaW50IHN6OwogICAgdmVjdG9yPG1hdD4gc3Q7CgogICAgc2VndHJlZSgpIHt9CiAgICBzZWd0cmVlKGludCBuKSB7IGluaXQobik7IH0KCiAgICB2b2lkIGluaXQoaW50IG4pIHsKICAgICAgICBzeiA9IDE7CiAgICAgICAgd2hpbGUgKHN6IDwgbikgc3ogPDw9IDE7CiAgICAgICAgc3QuYXNzaWduKHN6IDw8IDEsIGlkZW50aXR5X21hdCgpKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkKGNvbnN0IHZlY3RvcjxsbD4gJmFyciwgY29uc3QgdmVjdG9yPGludD4gJmMpIHsKICAgICAgICBpbnQgbiA9IChpbnQpYXJyLnNpemUoKSAtIDE7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHN0W3N6ICsgaV0gPSBsZWFmX21hdChhcnJbaSArIDFdLCBjW2kgKyAxXSk7CiAgICAgICAgZm9yIChpbnQgaSA9IHN6IC0gMTsgaSA+PSAxOyAtLWkpIHN0W2ldID0gbWVyZ2VfbWF0KHN0W2kgPDwgMV0sIHN0W2kgPDwgMSB8IDFdKTsKICAgIH0KCiAgICB2b2lkIHVwZGF0ZV92YWwoaW50IHBvcywgbGwgdmFsLCBpbnQgYykgewogICAgICAgIGludCBwID0gc3ogKyBwb3MgLSAxOwogICAgICAgIHN0W3BdID0gbGVhZl9tYXQodmFsLCBjKTsKICAgICAgICBmb3IgKHAgPj49IDE7IHA7IHAgPj49IDEpIHN0W3BdID0gbWVyZ2VfbWF0KHN0W3AgPDwgMV0sIHN0W3AgPDwgMSB8IDFdKTsKICAgIH0KCiAgICB2b2lkIHVwZGF0ZV9jb2woaW50IHBvcywgbGwgdmFsLCBpbnQgYykgewogICAgICAgIHVwZGF0ZV92YWwocG9zLCB2YWwsIGMpOwogICAgfQoKICAgIHBhaXI8bGwsIGludD4gYW5zd2VyKCkgY29uc3QgewogICAgICAgIGludCBzdGFydCA9IGlkKDAsIDApOwogICAgICAgIGxsIGJlc3QgPSBORUc7CiAgICAgICAgaW50IHdheXMgPSAwOwogICAgICAgIGZvciAoaW50IHQgPSAwOyB0IDwgczsgKyt0KSB7CiAgICAgICAgICAgIGNvbnN0IGNlbGwgJnggPSBzdFsxXS5hW3N0YXJ0XVt0XTsKICAgICAgICAgICAgaWYgKHguY250ID09IDApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoeC52YWwgPiBiZXN0KSB7CiAgICAgICAgICAgICAgICBiZXN0ID0geC52YWw7CiAgICAgICAgICAgICAgICB3YXlzID0geC5jbnQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoeC52YWwgPT0gYmVzdCkgewogICAgICAgICAgICAgICAgd2F5cyArPSB4LmNudDsKICAgICAgICAgICAgICAgIGlmICh3YXlzID49IE1PRCkgd2F5cyAtPSBNT0Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHtiZXN0LCB3YXlzfTsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBnb1swXVswXSA9IDA7CiAgICBnb1swXVsxXSA9IDE7CiAgICBnb1swXVsyXSA9IC0xOwogICAgZ29bMV1bMF0gPSAyOwogICAgZ29bMV1bMV0gPSAxOwogICAgZ29bMV1bMl0gPSAtMTsKICAgIGdvWzJdWzBdID0gMjsKICAgIGdvWzJdWzFdID0gLTE7CiAgICBnb1syXVsyXSA9IC0xOwoKICAgIGNpbiA+PiBuID4+IHE7CiAgICBhLmFzc2lnbihuICsgMSwgMCk7CiAgICBjb2wuYXNzaWduKG4gKyAxLCAwKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIGNpbiA+PiBhW2ldOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSBjaW4gPj4gY29sW2ldOwoKICAgIHNlZ3RyZWUgc3Qobik7CiAgICBzdC5idWlsZChhLCBjb2wpOwoKICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBpbnQgdHA7CiAgICAgICAgY2luID4+IHRwOwogICAgICAgIGlmICh0cCA9PSAxKSB7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBsbCB5OwogICAgICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgICAgICBhW3hdID0geTsKICAgICAgICAgICAgc3QudXBkYXRlX3ZhbCh4LCBhW3hdLCBjb2xbeF0pOwogICAgICAgIH0gZWxzZSBpZiAodHAgPT0gMikgewogICAgICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICAgICAgY29sW3hdID0geTsKICAgICAgICAgICAgc3QudXBkYXRlX2NvbCh4LCBhW3hdLCBjb2xbeF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF1dG8gW214LCB3YXlzXSA9IHN0LmFuc3dlcigpOwogICAgICAgICAgICBjb3V0IDw8IG14IDw8ICcgJyA8PCB3YXlzIDw8ICdcbic7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9