/*
ye mera template hai
apna khud likho bc :P
*/

/*
Author : Sarvagya Agarwal
*/

#include<bits/stdc++.h>
using namespace std;

//defines
#define openin freopen("input.txt","r",stdin)
#define openout freopen("output.txt","w",stdout)
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ll long long
#define mod 1000000007
#define repr(i,x,y) for (__typeof(x) i=x;i>=y;i--)
#define rep(i,x,y) for (__typeof(x) i=x;i<=y;i++)
#define all(c) (c).begin(),(c).end()
#define ff first
#define ss second
#define pb push_back
#define mp make_pair

/* Print pair */
template <typename T,typename S>
ostream & operator << (ostream &os , const pair<T,S> &v) {
    os << "(" ;
    os << v.first << "," << v.second << ")" ;
    return os ;
}
/* Print vector */
template <typename T>
ostream & operator << (ostream &os , const vector<T> &v) {
    os << "[" ;
    int sz = v.size() ;
    for(int i = 0 ; i < sz ; ++i) {
        os << v[i] ;
        if(i!=sz-1)os << "," ;
    }
    os << "]\n" ;
    return os ;
}
/* Print set */
template <typename T>
ostream & operator << (ostream &os , const set<T> &v) {
    T last = *v.rbegin() ;
    os << "[" ;
    for(auto it : v) {
        os << it  ;
        if(it != last) os << "," ;
    }
    os << "]\n" ;
    return os ;
}
/* Print Map */
template <typename T,typename S>
ostream & operator << (ostream &os , const map<T,S> &v) {
    for(auto it : v) {
        os << it.first << " : " << it.second << "\n" ;
    }
    return os ;
}
int power(int a , int b)
{
    int res = 1 ;
    while(b)
    {
        if(b%2) {
            res = (res * a) % mod ;
        }
        b/=2 ;
        a = (a*a) % mod ;
    }
    return res ;
}

//debug
#define TRACE

#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
		cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
		const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define trace(...)
#endif
bool is_power_of_two(int n)
{
    if(n == 0) return false ;
    return (n & (n-1)) == 0 ;
}
int count_bits(int n)
{
    return __builtin_popcount(n) ;
}
int count_bits_ll(int n)
{
    return __builtin_popcountll(n) ;
}
int largest_power(int n)
{
    int i ;
    for(i = 1 ; i <= n ; i *= 2) ;
    return i/2 ;
}
const int N = 1e6 + 5 ;
int n , arr[N * 4] , rem ;
void update(int i,int l,int r,int idx,int val)
{
    if(l == r) {
        arr[i] = val ;
        return ;
    }
    int m = (l + r) / 2 ;
    if(idx <= m) update(i*2,l,m,idx,val) ;
    else update(i*2+1,m+1,r,idx,val) ;
    arr[i] = arr[i*2] + arr[i*2+1] ;
}
void build(int i,int l,int r)
{
    if(l == r) {
        arr[i] = 1 ;
        return ;
    }
    int m = l + r >> 1 ;
    build(i * 2 , l , m ) ;
    build(i * 2 + 1 , m + 1 , r) ;
    arr[i] = arr[i*2] + arr[i*2+1] ;
}
int query_cnt(int i,int l,int r,int s,int e)
{
    if(l > r || r < s || l > e) return 0 ;
    if(l >= s and r <= e) return arr[i] ;
    int m = l + r >> 1 ;
    return query_cnt(i*2,l,m,s,e) + query_cnt(i*2+1,m+1,r,s,e) ;
}
int query(int i,int l,int r,int k)
{
    //trace(i,l,r,k,arr[i]);
    if(l==r) return l ;
    int m = (l + r) >> 1 ;
    int L = arr[i * 2] ;
    int R = arr[i*2+1] ;
    if(k <= L) return query(i*2,l,m,k) ;
    else return query(i*2+1,m+1,r,k-L) ;
}
int get_c(int index , int k)
{
    if(k > rem)k %= rem ;
    if(k == 0) k = rem ;
    // return kth remaining from index 'index'
    int cnt = query_cnt(1,1,n,index,n) ;
    int cnt2 = query_cnt(1,1,n,1,index-1) ;
    if(k <= cnt) {
        return query(1,1,n,cnt2 + k) ;
    }
    else {
        return query(1,1,n,k-cnt) ;
    }
}
int get_ac(int index , int k)
{

    if(k > rem)k %= rem ;
    if(k == 0) k = rem ;
    // return kth remaining from index 'index'
    int cnt = query_cnt(1,1,n,index+1,n) ;
    int cnt2 = query_cnt(1,1,n,1,index) ;
    if(k <= cnt2) {
        return query(1,1,n,cnt2+1-k) ;
    }
    else {
        return query(1,1,n,cnt-k+1+cnt2+cnt2) ;
    }
}
int main()
{
    int t ;
    scanf("%d",&t) ;
    //cin >> t ;
    while(t--) {
        scanf("%d",&n) ;ll k ; scanf("%lld",&k) ;
        build(1,1,n) ;
        rem = n ;
        if(k > 0) {
            int index = 1 ;
            ll kk = k ; 
            bool clock = true ;
            rep(i,1,n-1) {
                int temp ;
                if(clock) {
                    temp = get_c(index , kk) ;
                }
                else {
                    temp = get_ac(index , kk) ;
                }
                update(1,1,n,temp,0) ;
                index = temp ;
                clock ^= true ;
                kk += k ; rem-- ;
            }
            printf("%d\n",query(1,1,n,1));// << "\n" ;
        }
        else {
            int index = 1 ;
            ll kk = k ; 
            bool clock = false ;
            rep(i,1,n-1) {
                int temp ;
                if(clock) {
                    temp = get_c(index , -kk) ;
                }
                else {
                    temp = get_ac(index , -kk) ;
                }
                update(1,1,n,temp,0) ;
                index = temp ;
                clock ^= true ;
                kk += k ;rem--;
            }
            printf("%d\n",query(1,1,n,1));
        }
    }
    return 0;
}
