#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x = 0, f = 1; char c = getchar();
while(c > '9' || c < '0') {if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') {x = x * 10 + c - '0'; c = getchar();}
return x * f;
}
const int maxn = 1e5 + 10;
struct Node
{
int l, r;
int mina;
int lazy;
}t[maxn << 2];
struct node
{
int op;
int l, r;
int x;
}e[maxn];
int T;
int a[maxn], End[maxn];
int ans[maxn];
int cnt;
int n, q;
/*
牛魔的!!!!!对着线段树发癫!!!!!!!!!!!!!
为什么调不出来!!!!!!!!!!!!!!!!!!!!!
*/
void update(int id)
{
t[id].mina = min(t[id<<1].mina, t[id<<1|1].mina);
}
void pushdown(int id)
{
if(t[id].lazy)
{
t[id<<1].lazy += t[id].lazy;
t[id<<1|1].lazy += t[id].lazy;
t[id<<1].mina -= t[id].lazy;
t[id<<1|1].mina -= t[id].lazy;
t[id].lazy = 0;
}
}
void build(int id, int L, int R)
{
t[id].lazy = 0;
if(L == R)
{
t[id].lazy = 0;
t[id].mina = End[L];
}
int mid = (L + R) >> 1;
build(id<<1, L, mid);
build(id<<1|1, mid+1, R);
update(id);
}
void change(int id, int L, int R, int _l, int _r, int x)
{
if(L >= _l && R <= _r)
{
t[id].lazy += x;
return;
}
int mid = (L + R) >> 1;
if(_l <= mid) change(id<<1, L, mid, _l, _r, x);
if(_r > mid) change(id<<1|1, mid+1, R, _l, _r, x);
update(id);
}
int query(int id, int L, int R, int _l, int _r)
{
if(L >= _l && R <= _r) return t[id].mina;
int mid = (L + R) >> 1;
int ans = 1e18;
pushdown(id);
if(_l <= mid) ans = min(query(id<<1, L, mid, _l, _r), ans);
if(_r > mid) ans = min(query(id<<1|1, mid+1, R, _l, _r), ans);
return ans;
}
signed main()
{
T = read();
while(T--)
{
memset(e, 0, sizeof(e));
memset(a, 0, sizeof(a));
memset(End, 0, sizeof(End));//多测记得清空,被坑过好几回了。
memset(ans, 0, sizeof(ans));
cnt = 0;
n = read(); q = read();
for(int i = 1; i <= n; i++) a[i] = read();
for(int i = 1; i <= q; i++)
{
e[i].op = read(); e[i].l = read(); e[i].r = read();
if(e[i].op == 1)
{
e[i].x = read();
}
}
for(int i = 1; i <= n; i++) End[i] = read();
build(1, 1, n);
for(int i = q; i >= 1; i--)
{
if(e[i].op == 1)
{
change(1, 1, n, e[i].l, e[i].r, e[i].x);
}
else
{
ans[++cnt] = query(1, 1, n, e[i].l, e[i].r);
}
}
for(int i = cnt; i >= 1; i--)
{
cout << ans[i] << " ";
}
cout << endl;
}
return 0;
}
玄2关