#include<bits/stdc++.h>
#include<cstdio>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define root 1,n,1
using namespace std;
const int N=1e5+5;
struct node
{
long long col,l,r,minn;
node()
{
col=l=r=0;
minn=0x7f7f7f7f;
}
void color(int pls)
{
col+=pls;
minn+=pls;
}
}z[1000005];
long long T,n,q,a[N],b[N],x[N],ans[N];
long long cnt,op[N],ll[N],rr[N];
node operator+(const node &l,const node &r)
{
node res;
res.l=l.l,res.r=r.r;
res.minn=min(l.minn,r.minn);
return res;
}
void update(int rt)
{
z[rt]=z[rt<<1]+z[rt<<1|1];
}
void push_col(int rt)
{
if(z[rt].col)
{
z[rt<<1].color(z[rt].col);
z[rt<<1|1].color(z[rt].col);
z[rt].col=0;
}
}
void build(int l,int r,int rt)
{
if(l==r)
{
z[rt].l=z[rt].r=l;
z[rt].minn=b[l];
return ;
}
long long m=(l+r)>>1;
build(lson);
build(rson);
update(rt);
}
node query(int l,int r,int rt,int nl,int nr)
{
if(nl<=l&&r<=nr) return z[rt];
long long m=(l+r)>>1;
push_col(rt);
if(m>=nl)
{
if(m<nr) return query(lson,nl,nr)+query(rson,nl,nr);
else return query(lson,nl,nr);
}
else return query(rson,nl,nr);
}
void modify(int l,int r,int rt,int nl,int nr,int pls)
{
if(nl<=l&&r<=nr)
{
z[rt].color(pls);
return ;
}
push_col(rt);
long long m=(l+r)>>1;
if(m>=nl) modify(lson,nl,nr,pls);
if(m<nr) modify(rson,nl,nr,pls);
update(rt);
}
int main()
{
freopen("restore3.in","r",stdin);
freopen("restore.out","w",stdout);
cin>>T;
while(T--)
{
cnt=0;
memset(z,0x7f7f7f7f,sizeof(z));
memset(ans,0,sizeof(ans));
memset(x,0,sizeof(x));
memset(a,0,sizeof(a));
memset(ll,0,sizeof(ll));
memset(rr,0,sizeof(rr));
memset(op,0,sizeof(op));
memset(ans,0,sizeof(ans));
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=q;i++)
{
cin>>op[i]>>ll[i]>>rr[i];
if(op[i]==1) cin>>x[i];
}
for(int i=1;i<=n;i++) cin>>b[i];
build(root);
for(int i=q;i>0;i--)
{
if(op[i]==1)
modify(root,ll[i],rr[i],-x[i]);
else
ans[++cnt]=query(root,ll[i],rr[i]).minn;
}
for(int i=cnt;i>0;i--) cout<<ans[i]<<' ';
cout<<'\n';
}
return 0;
}