#include <bits/stdc++.h>
using namespace std;
#define F(i,j,k) for (signed i=signed(j);i<=signed(k);i++)
#define endl '\n'
#define int long long
const int maxn=1e5+5;
int t,n,q,a[maxn],b[maxn],cha[maxn],final[maxn],should[maxn];
struct NODE{
int op,l,r,x;
void read(){
cin>>op;
if(op==1) cin>>l>>r>>x;
else cin>>l>>r;
}
void clear(){
op=l=r=x=0;
}
}ask[maxn];
#define ls node*2
#define rs node*2+1
#define mid (l+r)/2
#define pkgl l,mid,ls
#define pkgr mid+1,r,rs
struct Segment{
int a[maxn],t[maxn*4],tag[maxn*4];
void updtag(int l,int r,int node,int x){
tag[node]+=x;
t[node]+=x;
}
void push_down(int l,int r,int node){
updtag(pkgl,tag[node]);
updtag(pkgr,tag[node]);
tag[node]=0;
}
void push_up(int node) {t[node]=min(t[ls],t[rs]);}
void build(int l,int r,int node){
if(l==r){t[node]=a[l];return;}
build(pkgl),build(pkgr);
push_up(node);
}
void update(int l,int r,int node,int x,int y,int want){
if(x<=l&&r<=y) {updtag(l,r,node,want);return;}
push_down(l,r,node);
if(mid>=x) update(pkgl,x,y,want);
if(mid<y) update(pkgr,x,y,want);
push_up(node);
}
int query(int l,int r,int node,int x,int y){
if(x<=l&&r<=y) return t[node];
push_down(l,r,node);
int res=LLONG_MAX;
if(mid>=x) res=min(res,query(pkgl,x,y));
if(mid<y) res=min(res,query(pkgr,x,y));
return res;
}
}t1;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>n>>q;
F(i,1,4*n) t1.t[i]=LLONG_MAX,t1.tag[i]=0;
F(i,1,n) cin>>a[i],final[i]=a[i];
F(i,1,q) ask[i].read();
F(i,1,n) cin>>b[i];
F(i,1,q) if(ask[i].op==1){
F(j,ask[i].l,ask[i].r) final[j]+=ask[i].x;
}
F(i,1,n) should[i]=a[i]+b[i]-final[i],t1.a[i]=should[i];
t1.build(1,n,1);
F(i,1,q) {
if(ask[i].op==2){
int mn=t1.query(1,n,1,ask[i].l,ask[i].r);
cout<<mn<<" ";
}
else{
t1.update(1,n,1,ask[i].l,ask[i].r,ask[i].x);
}
}
cout<<endl;
fill(a+1,a+1+n,0),fill(b+1,b+1+n,0),fill(final+1,final+1+n,0),fill(should+1,should+1+n,0);
F(i,1,n) ask[i].clear();
}
return 0;
}