import sys
input=sys.stdin.readline
for _ in range(int(input())):
n,k=map(int,input().split())
if(n==4 and k==3):
print(-1)
else:
ans=[]
visted=[False]*n
if(k!=n-1):
visted[k]=visted[n-1-k]=visted[0]=visted[n-1]=True
ans.extend([(k,n-1),(0,n-1-k)])
if(ans[0]==ans[1]):
ans.pop()
for i in range(n):
if(not visted[i]):
visted[i]=visted[n-1-i]=True
ans.append((i,n-1-i))
else:
visted[0] = visted[n-1] = visted[1] = visted[n - 2] =visted[2] = visted[n-3] = True
ans.extend([(n-2, n - 1), (1, n -3),(0,2)])
for i in range(n):
if (not visted[i]):
visted[i] = visted[n - 1 - i] = True
ans.append((i, n - 1 - i))
pass
for i in ans:
print(*i)
#include <iostream>
#include <map>
#include<unordered_map>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include<utility>
#include<climits>
#include<stack>
#include<set>
#include<cmath>
#define ull unsigned long long
#define ll long long
#define NUM 1000000007
//ull mod = 998244353;
using namespace std;
void solve()
{
ll n,k;
cin>>n>>k;
ll num = n -1 ;
if(k ==0)
{
for(ll i=0;i<=num/2 ;i++)
{
ll ck = i^num;
cout<<i<<" "<< ck <<endl;
}
return ;
}
else if(k< n-1)
{
ll ck = k^num;
cout<<0<<" "<<ck<<endl;
cout<<k<<" "<<num<<endl;
for(ll i=0;i<=num/2;i++)
{
if(i==0 or i==ck or i==k) continue;
ll ck1 = i^num;
cout<<i<<" "<<ck1<<endl;
}
return;
}
if(k == n-1)
{
if(n==4ll)
{
cout<<-1<<endl;
return;
}
cout<<0<<" "<<2<<endl;
cout<<1<<" "<<n-3<<endl;
cout<<n-2<<" "<<n-1<<endl;
for(ll i=0;i<=num/2;i++)
{
if(i<=2) continue;
ll ck1 = i^num;
cout<<i<<" "<<ck1<<endl;
}
}
return;
}
int main()
{
int t ;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
1822. Sign of the Product of an Array | 1464. Maximum Product of Two Elements in an Array |
1323. Maximum 69 Number | 832. Flipping an Image |
1295. Find Numbers with Even Number of Digits | 1704. Determine if String Halves Are Alike |
1732. Find the Highest Altitude | 709. To Lower Case |
1688. Count of Matches in Tournament | 1684. Count the Number of Consistent Strings |
1588. Sum of All Odd Length Subarrays | 1662. Check If Two String Arrays are Equivalent |
1832. Check if the Sentence Is Pangram | 1678. Goal Parser Interpretation |
1389. Create Target Array in the Given Order | 1313. Decompress Run-Length Encoded List |
1281. Subtract the Product and Sum of Digits of an Integer | 1342. Number of Steps to Reduce a Number to Zero |
1528. Shuffle String | 1365. How Many Numbers Are Smaller Than the Current Number |
771. Jewels and Stones | 1512. Number of Good Pairs |
672. Richest Customer Wealth | 1470. Shuffle the Array |
1431. Kids With the Greatest Number of Candies | 1480. Running Sum of 1d Array |
682. Baseball Game | 496. Next Greater Element I |
232. Implement Queue using Stacks | 844. Backspace String Compare |