description: Theofanis really likes sequences of positive integers, thus his teacher (Yeltsa Kcir) gave him a problem about a sequence that consists of only special numbers.
  
  Let's call a positive number special if it can be written as a sum of different non-negative powers of n. For example, for n = 4 number 17 is special, because it can be written as 4^0 + 4^2 = 1 + 16 = 17, but 9 is not.
  
  Theofanis asks you to help him find the k-th special number if they are sorted in increasing order. Since this number may be too large, output it modulo 10^9+7.
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of test cases.
  
  The first and only line of each test case contains two integers n and k (2 ≤ n ≤ 10^9; 1 ≤ k ≤ 10^9).
  
  Output
  
  For each test case, print one integer — the k-th special number in increasing order modulo 10^9+7.
  
  Example
  
  Input
  
  
  3
  3 4
  2 12
  105 564
  
  
  Output
  
  
  9
  12
  3595374
  
  Note
  
  For n = 3 the sequence is [1,3,4,9...]
solution: import java.io.*;
  import java.util.*;
  import java.lang.*;
  import static java.lang.Math.*;
  
  // Sachin_2961 submission //
  public class Codeforces {
  
      static void solve() {
          long MOD = (long)1e9+7;
          int  n = fs.nInt(), k = fs.nInt();
          if(n == 2 ){
              out.println(k);
              return;
          }
          int[]bit = new int[31];
          long[]pow = new long[31];
  
          pow[0] = 1;
          for(int i=1;i<31;i++){
              pow[i] = n*pow[i-1];
              pow[i] %= MOD;
          }
          int ind = 0;
          while (k > 0 ){
              bit[ind] = (k%2 == 1)?1:0;
              ind++;k /= 2;
          }
          long num = 0;
          for(int i=0;i<31;i++){
  
              num += (bit[i]*pow[i])%MOD;
              num %= MOD;
          }
          out.println(num);
      }
  
      static boolean multipleTestCase = true; static FastScanner fs; static PrintWriter out;
      public static void main(String[]args){
         try{
             fs = new FastScanner();
             out = new PrintWriter(System.out);
             int tc = (multipleTestCase)?fs.nInt():1;
             while (tc-->0)solve();
             out.flush();
             out.close();
         }catch (Exception e){
             e.printStackTrace();
         }
      }
      static class FastScanner {
          BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
          StringTokenizer st=new StringTokenizer("");
          String n() {
              while (!st.hasMoreTokens())
                  try {
                      st=new StringTokenizer(br.readLine());
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              return st.nextToken();
          }
          String Line()
          {
              String str = "";
              try
              {
                  str = br.readLine();
              }catch (IOException e)
              {
                  e.printStackTrace();
              }
              return str;
          }
          int nInt() {return Integer.parseInt(n()); }
          long nLong() {return Long.parseLong(n());}
          double nDouble(){return Double.parseDouble(n());}
          int[]aI(int n){
              int[]ar = new int[n];
              for(int i=0;i<n;i++)
                  ar[i] = nInt();
              return ar;
          }
      }
  }