WA on #5
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pl (p<<1)
#define pr (p<<1|1)
const int N=2e5+10,mod=998244353;
int n,q,a[N],b[N],sumab[N<<2],suma[N<<2],sumb[N<<2],adda[N<<2],addb[N<<2];
void push_down(int p,int l,int mid,int r){
(sumab[pl]+=(1ll*sumb[pl]*adda[p]%mod+1ll*suma[pl]*addb[p]%mod)%mod)%=mod,(sumab[pr]+=(1ll*sumb[pr]*adda[p]%mod+1ll*suma[pr]*addb[p]%mod)%mod)%=mod;
(suma[pl]+=1ll*adda[p]*(mid-l+1))%=mod,(suma[pr]+=1ll*adda[p]*(r-mid))%=mod,(sumb[pl]+=1ll*addb[p]*(mid-l+1))%=mod,(sumb[pr]+=1ll*addb[p]*(r-mid))%=mod;
(adda[pl]+=adda[p])%=mod,(adda[pr]+=adda[p])%=mod,(addb[pl]+=addb[p])%=mod,(addb[pr]+=addb[p])%=mod,adda[p]=0,addb[p]=0;
}void push_up(int p){sumab[p]=(sumab[pl]+sumab[pr])%mod,suma[p]=(suma[pl]+suma[pr])%mod,sumb[p]=(sumb[pl]+sumb[pr])%mod;}
void updatea(int l,int r,int le,int ri,int v,int p){
if(l>=le&&r<=ri)return (sumab[p]+=1ll*v*sumb[p]%mod)%=mod,(suma[p]+=1ll*v*(r-l+1)%mod)%=mod,(adda[p]+=v)%=mod,void();
int mid=l+r>>1;push_down(p,l,mid,r);
if(le<=mid)updatea(l,mid,le,ri,v,pl);
if(ri>mid)updatea(mid+1,r,le,ri,v,pr);
push_up(p);
}void updateb(int l,int r,int le,int ri,int v,int p){
if(l>=le&&r<=ri)return (sumab[p]+=1ll*v*suma[p]%mod)%=mod,(sumb[p]+=1ll*v*(r-l+1)%mod)%=mod,(addb[p]+=v)%=mod,void();
int mid=l+r>>1;push_down(p,l,mid,r);
if(le<=mid)updateb(l,mid,le,ri,v,pl);
if(ri>mid)updateb(mid+1,r,le,ri,v,pr);
push_up(p);
}int query(int l,int r,int le,int ri,int p){
if(l>=le&&r<=ri)return sumab[p];
int mid=l+r>>1,ret=0;push_down(p,l,mid,r);
if(le<=mid)(ret+=query(l,mid,le,ri,pl))%=mod;
if(ri>mid)(ret+=query(mid+1,r,le,ri,pr))%=mod;
return push_up(p),ret;
}void build(int l,int r,int p){
if(l==r)return sumab[p]=1ll*a[l]*b[l]%mod,suma[p]=a[l]%mod,sumb[p]=b[l]%mod,void();
int mid=l+r>>1;
build(l,mid,pl),build(mid+1,r,pr),push_up(p);
}/*int */main(){
cin>>n>>q;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
build(1,n,1);
for(int op,l,r,v;q--;){
cin>>op>>l>>r;
if(op==1)cin>>v,updatea(1,n,l,r,v%mod,1);
if(op==2)cin>>v,updateb(1,n,l,r,v%mod,1);
if(op==3)cout<<query(1,n,l,r,1)<<'\n';
}return 0;
}