#include<cstdio>
#include<algorithm>
using namespace std;
unsigned int T,N,M,sol;
struct portal{
unsigned int x1,y1,x2,y2;
unsigned int c,c1,c2;
} p[4];
inline unsigned int min(unsigned int &a,unsigned int &b){
if(a<=b)
return a;
return b;
}
inline int dist(const int & x1,const int & y1,const int & x2,const int & y2){
return(abs(x2-x1) + abs(y2-y1));
}
int main(){
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
for(scanf("%d",&T);T;--T){
scanf("%d%d",&N,&M);
for(int i=1;i<=3;++i)
scanf("%d%d%d%d%d",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2,&p[i].c);
//costul de a ajunge la fiecare portal
for(int i=1;i<=3;++i){
p[i].c1=p[i].x1+p[i].y1;
p[i].c2=p[i].x2+p[i].y2;
}
//minimizam costul de a ajunge la fiecare portal
bool ok=0;
do {
ok=0;
for(int i=1;i<=3;++i){
//ne miscam intre Pi
if(p[i].c1 > p[i].c2+p[i].c){
p[i].c1= p[i].c2+p[i].c;
ok=1;
}
if(p[i].c2 > p[i].c1+p[i].c){
p[i].c2 = p[i].c1+p[i].c;
ok=1;
}
}
for(int i=1;i<=3;++i)
for(int j=1;j<=3;++j){
//ajungem in portalul j din portalul i
if(j!=i){
if(p[j].c1 > p[i].c1 + dist(p[j].x1,p[j].y1,p[i].x1,p[i].y1) ){
p[j].c1 = p[i].c1 + dist(p[j].x1,p[j].y1,p[i].x1,p[i].y1);
ok=1;
}
if(p[j].c1 > p[i].c2 + dist(p[j].x1,p[j].y1,p[i].x2,p[i].y2) ){
p[j].c1 = p[i].c2 + dist(p[j].x1,p[j].y1,p[i].x2,p[i].y2);
ok=1;
}
if(p[j].c2 > p[i].c1 + dist(p[j].x2,p[j].y2,p[i].x1,p[i].y1) ){
p[j].c2 = p[i].c1 + dist(p[j].x2,p[j].y2,p[i].x1,p[i].y1);
ok=1;
}
if(p[j].c2 > p[i].c2 + dist(p[j].x2,p[j].y2,p[i].x2,p[i].y2) ){
p[j].c2 = p[i].c2 + dist(p[j].x2,p[j].y2,p[i].x2,p[i].y2);
ok=1;
}
}
}
} while(ok);
sol=M+N;
for(int i=1;i<=3;++i){
sol=min(sol,(N-p[i].x1+M-p[i].y1 + p[i].c1));
sol=min(sol,(N-p[i].x2+M-p[i].y2 + p[i].c2));
}
printf("%d",sol);
}
return 0;
}