#include <bits/stdc++.h>
#define Debug(x) std::cout<<x<<" ";
#define db(x) cout<<#x<<" : "<<x<<endl;
#define db2(x,y) cout<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<endl;
#define db3(x,y,z) cout<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<" "<<#z<<" : "<<z<<endl;
#define db4(x,y,z,k) cout<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<" "<<#z<<" : "<<z<<" "<<#k<<" : "<<k<<endl;
#define db5(x,y,z,g,j) cout<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<" "<<#z<<" : "<<z<<" "<<#g<<" : "<<g<<" "<<#j<<" : "<<j<<endl;
#define db6(x,y,z,g,j,f) cout<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<" "<<#z<<" : "<<z<<" "<<#g<<" : "<<g<<" "<<#j<<" : "<<j<<" "<<#f<<" : "<<f<<endl;
template<typename T>inline void debug(T& x){Debug(x);}
template<typename T,typename... Args>inline void debug(T& x,Args&... args){int cnt=1;debug(x);debug(args...);putchar('\n');}
#define ls rt<<1
#define rs rt<<1|1
#define lss rt<<1,l,mid,ql,qr
#define rss rt<<1|1,mid+1,r,ql,qr
#define fi first
#define se second
typedef long long LL;
typedef std::pair<int, int> pii;
typedef unsigned long long ULL;
#define hh cout<<endl;
using namespace std;
template<typename T>inline void rd(T& x){int f=0,c=getchar();x=0;while(!isdigit(c))f|=c=='-',c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();if(f)x=-x;}
template<typename T,typename... Args>inline void rd(T& x,Args&... args){rd(x);rd(args...);}
template<typename T>inline void wt(T x,int e=0){if(e==2)putchar(' ');if(x<0){putchar('-');x=~(x-1);}int s[30],top=0;while(x){s[++top]=x%10;x/=10;}if(!top)s[++top]=0;while(top)putchar(s[top--]+'0');if(e==1)putchar('\n');if(e==3)putchar(' ');}
inline void solve();signed main(){int T=1;
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
#endif
for(int i=1;i<=T;i++) solve();return 0;}
const int N=3e5+5;
const int mod=1e9+7;
const int INF=0x7fffffff;
const LL LINF=0x7fffffffffffffff;
int n,m;
int x[N],v[N];
int zd[N<<2],tot;
struct nq
{
int opt,l,r,a,b,c;
}Q[N];
namespace sgt
{
LL t[N<<3],tm[N<<3];
void pushup(int rt)
{
t[rt]=t[ls]+t[rs];
tm[rt]=tm[ls]+tm[rs];
}
void update(int rt,int l,int r,int pos,int c)
{
if(l==r)
{
t[rt]+=c;
tm[rt]+=1LL*c*zd[pos];
return;
}
int mid=l+r>>1;
if(pos<=mid) update(ls,l,mid,pos,c);
else update(rs,mid+1,r,pos,c);
pushup(rt);
}
void query(int rt,int l,int r,int ql,int qr,LL& q1,LL& q2)
{
if(ql<=l&&r<=qr)
{
q1+=t[rt];
q2+=tm[rt];
return;
}
int mid=l+r>>1;
if(ql<=mid) query(lss,q1,q2);
if(qr>mid) query(rss,q1,q2);
}
};
int mm;
void godiscre()
{
sort(zd+1,zd+1+tot);
mm=unique(zd+1,zd+1+tot)-zd-1;
for(int i=1;i<=n;i++) x[i]=lower_bound(zd+1,zd+1+mm,x[i])-zd;
for(int i=1;i<=m;i++)
{
if(Q[i].opt==1)
{
Q[i].l=lower_bound(zd+1,zd+1+mm,Q[i].l)-zd;
Q[i].r=lower_bound(zd+1,zd+1+mm,Q[i].r)-zd;
}
else if(Q[i].opt==2)
{
Q[i].b=lower_bound(zd+1,zd+1+mm,Q[i].b)-zd;
}
}
}
LL c_check;
bool check(int l,int mid)
{
LL st=0,stm=0;
sgt::query(1,1,mm,l,mid,st,stm);
if(st>=c_check) return true;
return false;
}
bool check2(int l,int mid)
{
LL st=0,stm=0;
sgt::query(1,1,mm,l,mid,st,stm);
if(st>c_check) return true;
return false;
}
LL cal(int l,int r,int pos)
{
LL res=0;
LL st=0,stm=0;
sgt::query(1,1,mm,l,pos-1,st,stm);
res+=zd[pos]*st;
res-=stm;
st=0,stm=0;
sgt::query(1,1,mm,pos+1,r,st,stm);
res+=stm;
res-=zd[pos]*st;
return res;
}
void solve()
{
rd(n,m);
for(int i=1;i<=n;i++) rd(x[i]),zd[++tot]=x[i];
for(int i=1;i<=n;i++) rd(v[i]);
for(int i=1;i<=m;i++)
{
int opt,l,r,a,b,c;
rd(opt);
if(opt==1) rd(l,r),Q[i].opt=1,Q[i].l=l,Q[i].r=r,zd[++tot]=l,zd[++tot]=r;
if(opt==2) rd(a,b,c),Q[i].opt=2,Q[i].a=a,Q[i].b=b,Q[i].c=c,zd[++tot]=b;
}
godiscre();
for(int i=1;i<=n;i++) sgt::update(1,1,mm,x[i],v[i]);
for(int i=1;i<=m;i++)
{
int opt=Q[i].opt,l=Q[i].l,r=Q[i].r,a=Q[i].a,b=Q[i].b,c=Q[i].c;
if(opt==1)
{
LL sumt=0,sumtm=0;
sgt::query(1,1,mm,l,r,sumt,sumtm);
c_check=sumt/2;
int lp=l,rp=r;
while(lp<=rp)
{
int mid=lp+rp>>1;
if(check(l,mid)) rp=mid-1;
else lp=mid+1;
}
int as1=rp+1;
c_check=sumt/2;
lp=l,rp=r;
while(lp<=rp)
{
int mid=lp+rp>>1;
if(check2(l,mid)) rp=mid-1;
else lp=mid+1;
}
int as2=rp+1;
LL ans1=cal(l,r,as1);
LL ans2=cal(l,r,as2);
wt(min(ans1,ans2),1);
}
else
{
sgt::update(1,1,mm,x[a],-v[a]);
sgt::update(1,1,mm,b,c);
x[a]=b,v[a]=c;
}
}
}