/* AUTHOR:hruday pabbisetty NIT ROURKElA I am too dumb to realize that i am too dumb. */ #include #include using namespace std; using namespace std::tr1; #define opt ios_base::sync_with_stdio(0) #define lli long long int #define ulli unsigned long long int #define I int #define S string #define D double #define rep(i,a,b) for(i=a;ib;i--) #define in(n) scanf("%lld",&n) #define in2(a,b) scanf("%lld %lld",&a,&b) #define in3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define out(n) printf("%lld\n",n) #define inu(a) scanf("%lld",&a) #define outu(a) printf("%llu",a) #define ins(s) scanf("%s",&s) #define outs(s) printf("%s",s) #define mod 1000000007 #define inf 100000000000000 typedef long long ll; typedef pair plli; typedef vector vlli; typedef vector vulli; typedef vector vll; typedef vector vs; typedef vector vplli; #define MM(a,x) memset(a,x,sizeof(a)); #define ALL(x) (x).begin(), (x).end() #define P(x) cerr<<"{"#x<<" = "<<(x)<<"}"< "#b": "<<1000*(b-a)/CLOCKS_PER_SEC<<"ms}\n"; #define UN(v) sort(ALL(v)), v.resize(unique(ALL(v))-v.begin()) #define mp make_pair #define pb push_back #define f first #define s second #define sz() size() #define nl cout<<"\n" #define MX1 100005 #define MX2 1000005 #define bs binary_search #define lb lower_bound #define ub upper_bound lli dx[]={0,0,-1,1,-1,-1,1,1}; lli dy[]={1,-1,0,0,1,-1,-1,1}; lli power(lli a,lli b) { lli value; if(b==0) { return 1; } else if(b%2==0) { value=power(a,b/2)%mod; return(value*value)%mod; } else { value=power(a,b/2)%mod; return ((a*value)%mod*(value))%mod; } } lli n,m,a[55][55],b[55][55]; lli f(lli x,lli y,lli val) { if(x<1 or x>n or y<1 or y>m) { return 1; } lli k; rep(k,0,4) { if(a[x+dx[k]][y+dy[k]]==val) { return 0; } } return 1; } int main() { /* #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif*/ opt; lli t; cin>>t; while(t--) { cin>>n>>m; MM(a,0); lli i,j,k,maxi=1,val; if(n==1) { i=1; val=1; while(i<=m) { a[1][i]=val; a[1][i+1]=val; i+=2; if(val==1) { val=2; } else { val=1; } } } else if(m==1) { i=1; val=1; while(i<=n) { a[i][1]=val; a[i+1][1]=val; i+=2; if(val==1) { val=2; } else { val=1; } } } else if(n==2) { rep(i,1,1+m) { val=i%3; if(val==0) { val=3; } a[1][i]=val; a[2][i]=val; } } else if(m==2) { rep(i,1,1+n) { val=i%3; if(!val) { val=3; } a[i][1]=val; a[i][2]=val; } } else { rep(i,1,1+n) { if(i%4==1) { j=1; val=1; while(j<=m) { a[i][j]=val; a[i][j+1]=val; j+=2; if(val==1) { val=2; } else { val=1; } } } else if(i%4==2) { j=1; val=3; while(j<=m) { a[i][j]=val; a[i][j+1]=val; j+=2; if(val==3) { val=4; } else { val=3; } } } else if(i%4==3) { j=1; val=2; while(j<=m) { a[i][j]=val; a[i][j+1]=val; j+=2; if(val==1) { val=2; } else { val=1; } } } else { j=1; val=4; while(j<=m) { a[i][j]=val; a[i][j+1]=val; j+=2; if(val==3) { val=4; } else { val=3; } } } } } rep(i,1,1+n) { rep(j,1,1+m) { maxi=max(maxi,a[i][j]); } } cout<