- #include<iostream> 
- #include<cstdio> 
- #include<cmath> 
- #include<cstring> 
- #include<stdlib.h> 
- #include<algorithm> 
- #define getcx getchar_unlocked 
- #define pc(x) putchar_unlocked(x); 
- #ifndef ONLINE_JUDGE 
-     #define getcx getchar 
- #endif 
- using namespace std; 
- #define ull unsigned long long int 
- #define lli long long int 
- #define li long int 
- #define ii int 
- #define mod 1000000007				 
- inline int inp() 
- { 
-    int n=0; 
-    int ch=getcx();int sign=1; 
-    while( ch < '0' || ch > '9' ){if(ch=='-')sign=-1; ch=getcx();} 
-   
-    while(  ch >= '0' && ch <= '9' ) 
-            n = (n<<3)+(n<<1) + ch-'0', ch=getcx(); 
-    return n*sign; 
- } 
-   
- inline long long in() 
- { 
-    long long n=0; 
-    long long ch=getcx();long long sign=1; 
-    while( ch < '0' || ch > '9' ){if(ch=='-')sign=-1; ch=getcx();} 
-   
-    while(  ch >= '0' && ch <= '9' ) 
-            n = (n<<3)+(n<<1) + ch-'0', ch=getcx(); 
-    return n*sign; 
- } 
-   
- inline void write (lli n) 
- { 
-     lli N = n, rev, count = 0; 
-     rev = N; 
-     if (N == 0) { pc('0'); pc('\n'); return ;} 
-     while ((rev % 10) == 0) { count++; rev /= 10;} //obtain the count of the number of 0s 
-     rev = 0; 
-     while (N != 0) { rev = (rev<<3) + (rev<<1) + N % 10; N /= 10;}  //store reverse of N in rev 
-     while (rev != 0) { pc(rev % 10 + '0'); rev /= 10;} 
-     while (count--) pc('0'); 
- } 
-   
- int main() { 
- 	// your code goes here 
- 	lli t,a,b; 
- 	t = in(); 
- 	while ( t-- ) 
- 	{ 
-   
- 		a= in();	b = in(); 
- 		printf("%lld\n",(a%mod * b%mod - a%mod - b%mod)); 
- 	} 
- 	return 0; 
- } 
				I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y21hdGg+CiNpbmNsdWRlPGNzdHJpbmc+CiNpbmNsdWRlPHN0ZGxpYi5oPgojaW5jbHVkZTxhbGdvcml0aG0+CiNkZWZpbmUgZ2V0Y3ggZ2V0Y2hhcl91bmxvY2tlZAojZGVmaW5lIHBjKHgpIHB1dGNoYXJfdW5sb2NrZWQoeCk7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICAjZGVmaW5lIGdldGN4IGdldGNoYXIKI2VuZGlmCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBsbGkgbG9uZyBsb25nIGludAojZGVmaW5lIGxpIGxvbmcgaW50CiNkZWZpbmUgaWkgaW50CiNkZWZpbmUgbW9kIDEwMDAwMDAwMDcJCQkJCmlubGluZSBpbnQgaW5wKCkKewogICBpbnQgbj0wOwogICBpbnQgY2g9Z2V0Y3goKTtpbnQgc2lnbj0xOwogICB3aGlsZSggY2ggPCAnMCcgfHwgY2ggPiAnOScgKXtpZihjaD09Jy0nKXNpZ249LTE7IGNoPWdldGN4KCk7fQogCiAgIHdoaWxlKCAgY2ggPj0gJzAnICYmIGNoIDw9ICc5JyApCiAgICAgICAgICAgbiA9IChuPDwzKSsobjw8MSkgKyBjaC0nMCcsIGNoPWdldGN4KCk7CiAgIHJldHVybiBuKnNpZ247Cn0KCmlubGluZSBsb25nIGxvbmcgaW4oKQp7CiAgIGxvbmcgbG9uZyBuPTA7CiAgIGxvbmcgbG9uZyBjaD1nZXRjeCgpO2xvbmcgbG9uZyBzaWduPTE7CiAgIHdoaWxlKCBjaCA8ICcwJyB8fCBjaCA+ICc5JyApe2lmKGNoPT0nLScpc2lnbj0tMTsgY2g9Z2V0Y3goKTt9CiAKICAgd2hpbGUoICBjaCA+PSAnMCcgJiYgY2ggPD0gJzknICkKICAgICAgICAgICBuID0gKG48PDMpKyhuPDwxKSArIGNoLScwJywgY2g9Z2V0Y3goKTsKICAgcmV0dXJuIG4qc2lnbjsKfQoKaW5saW5lIHZvaWQgd3JpdGUgKGxsaSBuKQp7CiAgICBsbGkgTiA9IG4sIHJldiwgY291bnQgPSAwOwogICAgcmV2ID0gTjsKICAgIGlmIChOID09IDApIHsgcGMoJzAnKTsgcGMoJ1xuJyk7IHJldHVybiA7fQogICAgd2hpbGUgKChyZXYgJSAxMCkgPT0gMCkgeyBjb3VudCsrOyByZXYgLz0gMTA7fSAvL29idGFpbiB0aGUgY291bnQgb2YgdGhlIG51bWJlciBvZiAwcwogICAgcmV2ID0gMDsKICAgIHdoaWxlIChOICE9IDApIHsgcmV2ID0gKHJldjw8MykgKyAocmV2PDwxKSArIE4gJSAxMDsgTiAvPSAxMDt9ICAvL3N0b3JlIHJldmVyc2Ugb2YgTiBpbiByZXYKICAgIHdoaWxlIChyZXYgIT0gMCkgeyBwYyhyZXYgJSAxMCArICcwJyk7IHJldiAvPSAxMDt9CiAgICB3aGlsZSAoY291bnQtLSkgcGMoJzAnKTsKfQoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglsbGkgdCxhLGI7Cgl0ID0gaW4oKTsKCXdoaWxlICggdC0tICkKCXsKCQoJCWE9IGluKCk7CWIgPSBpbigpOwoJCXByaW50ZigiJWxsZFxuIiwoYSVtb2QgKiBiJW1vZCAtIGElbW9kIC0gYiVtb2QpKTsKCX0KCXJldHVybiAwOwp9