#include using namespace std; #include using mint = atcoder::modint998244353; int main(){ ios::sync_with_stdio(false),cin.tie(0); int n,q; cin >> n >> q; constexpr int m = 30; vector> segtree(2*n); int o = (1< A(n);for (int& a:A) cin >> a; for (int i(0);i < n;++i) for (int k(0);k < m;++k) segtree[n+i][k] = A[i]^((A[i]>>k)&1?o:0); for (int i(n-1);i;--i) for (int k(0);k < m;++k) segtree[i][k] = segtree[i<<1][k]|segtree[i<<1|1][k]; while(q--){ int t; cin >> t; if (t==1){ int x,y; cin >> x >> y; --x; A[x] = y; for (int k(0);k < m;++k) segtree[n+x][k] = y^((y>>k)&1?o:0); for (int l((n+x)>>1);l;l>>=1) for (int k(0);k < m;++k) segtree[l][k] = segtree[l<<1][k]|segtree[l<<1|1][k]; } else { int l,r; cin >> l >> r; --l; array res; res.fill(0); for (int ll(n+l),rr(n+r);ll < rr;ll>>=1,rr>>=1){ if (ll&1){ for (int k(0);k < m;++k) res[k] |= segtree[ll][k]; ++ll; } if (rr&1){ --rr; for (int k(0);k < m;++k) res[k] |= segtree[rr][k]; } } array R; R.fill(0); mint nz = (1<>30)==0){ nz -= (1<