#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; array,m> segtree; for (int i(0);i < m;++i) segtree[i] = vector(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[k][n+i] = A[i]^((A[i]>>k)&1?o:0); for (int k(0);k < m;++k) for (int i(n-1);i;--i) segtree[k][i] = segtree[k][i<<1]|segtree[k][i<<1|1]; while(q--){ int t; cin >> t; if (t==1){ int x,y; cin >> x >> y; --x; A[x] = y; for (int k(0);k < 30;++k){ segtree[k][n+x] = y^((y>>k)&1?o:0); for (int l((n+x)>>1);l;l>>=1) segtree[k][l] = segtree[k][l<<1]|segtree[k][l<<1|1]; } } else { int l,r; cin >> l >> r; --l; array R; R.fill(0); mint nz = (1<>=1,rr>>=1){ if (ll&1) res |= segtree[k][ll++]; if (rr&1) res |= segtree[k][--rr]; } if ((res>>30)==0){ nz -= (1<