#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<climits>
#define ls id<<1
#define rs id<<1|1
#define MAXN 500005
#define int long long
#define ull unsigned long long
#define rep(k,l,r) for(register int k=l;k<=r;++k)
#define req(k,l,r) for(register int k=l;k<r;++k)
#define qep(k,l,r) for(register int k=l;k>=r;--k)
#define qeq(k,l,r) for(register int k=l;k>r;--k)
#define sped_cout_cin ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
int n,m,l,r,k,t,x,y,op,id;
int luA[MAXN<<1],luB[MAXN<<1];
struct tree{int l,r,sum1,sum2;}tr[MAXN*4];
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline void pushup(int id){
tr[id].sum1=tr[ls].sum1+tr[rs].sum1,
tr[id].sum2=min(tr[ls].sum2,tr[rs].sum2);
return ;
}
void build(int id,int l,int r){
tr[id].l=l,tr[id].r=r;
if(l==r){
tr[id].sum1=luA[l]+luB[l],
tr[id].sum2=luA[l]*luB[l];
return ;
}
int mid=l+r>>1;
build(ls,l,mid),build(rs,mid+1,r);
pushup(id);
return ;
}
void Change1(int id,int l,int r,int k,int t){
if(tr[id].sum2>k) return ;
if(tr[id].l==tr[id].r){
luA[tr[id].l]+=t,luB[tr[id].l]+=t,
tr[id].sum1+=t<<1,tr[id].sum2=luA[tr[id].l]*luB[tr[id].l];
return ;
}
int mid=tr[id].l+tr[id].r>>1;
if(l<=mid) Change1(ls,l,r,k,t);
if(r>mid) Change1(rs,l,r,k,t);
pushup(id);
return ;
}
void Change2(int id,int tar,int x,int y){
if(tr[id].l==tr[id].r){
luA[tr[id].l]=x,luB[tr[id].l]=y,
tr[id].sum1=x+y,tr[id].sum2=x*y;
return ;
}
int mid=tr[id].l+tr[id].r>>1;
if(tar<=mid) Change2(ls,tar,x,y);
if(tar>mid) Change2(rs,tar,x,y);
pushup(id);
return ;
}
int query(int id,int l,int r){
if(tr[id].l>=l&&tr[id].r<=r) return tr[id].sum1;
int mid=tr[id].l+tr[id].r>>1,s=0;
if(l<=mid) s+=query(ls,l,r);
if(r>mid) s+=query(rs,l,r);
return s;
}
signed main(){
n=read(),m=read();
rep(i,1,n) luA[i]=read();
rep(i,1,n) luB[i]=read();
build(1,1,n);
while(m--){
cin>>op;
if(op==1){
l=read(),r=read(),k=read(),t=read();
Change1(1,l,r,k,t);
}else if(op==2){
id=read(),x=read(),y=read();
Change2(1,id,x,y);
}else if(op==3){
l=read(),r=read();
cout<<query(1,l,r)<<'\n';
}
}
return 0;
}