description: Berland State University has received a new update for the operating system. Initially it is installed only on the 1-st computer.
  
  Update files should be copied to all n computers. The computers are not connected to the internet, so the only way to transfer update files from one computer to another is to copy them using a patch cable (a cable connecting two computers directly). Only one patch cable can be connected to a computer at a time. Thus, from any computer where the update files are installed, they can be copied to some other computer in exactly one hour.
  
  Your task is to find the minimum number of hours required to copy the update files to all n computers if there are only k patch cables in Berland State University.
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10^5) — the number of test cases.
  
  Each test case consists of a single line that contains two integers n and k (1 ≤ k ≤ n ≤ 10^{18}) — the number of computers and the number of patch cables.
  
  Output
  
  For each test case print one integer — the minimum number of hours required to copy the update files to all n computers.
  
  Example
  
  Input
  
  
  4
  8 3
  6 6
  7 1
  1 1
  
  
  Output
  
  
  4
  3
  6
  0
  
  Note
  
  Let's consider the test cases of the example:
  
    * n=8, k=3: 
      1. during the first hour, we copy the update files from the computer 1 to the computer 2; 
      2. during the second hour, we copy the update files from the computer 1 to the computer 3, and from the computer 2 to the computer 4; 
      3. during the third hour, we copy the update files from the computer 1 to the computer 5, from the computer 2 to the computer 6, and from the computer 3 to the computer 7; 
      4. during the fourth hour, we copy the update files from the computer 2 to the computer 8. 
    * n=6, k=6: 
      1. during the first hour, we copy the update files from the computer 1 to the computer 2; 
      2. during the second hour, we copy the update files from the computer 1 to the computer 3, and from the computer 2 to the computer 4; 
      3. during the third hour, we copy the update files from the computer 1 to the computer 5, and from the computer 2 to the computer 6. 
    * n=7, k=1: 
      1. during the first hour, we copy the update files from the computer 1 to the computer 2; 
      2. during the second hour, we copy the update files from the computer 1 to the computer 3; 
      3. during the third hour, we copy the update files from the computer 1 to the computer 4; 
      4. during the fourth hour, we copy the update files from the computer 4 to the computer 5; 
      5. during the fifth hour, we copy the update files from the computer 4 to the computer 6; 
      6. during the sixth hour, we copy the update files from the computer 3 to the computer 7. 
solution: // Generated by Code Flattener.
  // https://plugins.jetbrains.com/plugin/9979-idea-code-flattener
  
  import java.io.*;
  import java.util.StringTokenizer;
  
  public class Main {
      public static void main(String[] args) {
          Solution solution = new ASolution();
          boolean local = System.getProperty("ONLINE_JUDGE") == null && !solution.isInteractive();
          String input = local ? "input.txt" : null;
          solution.in = new MyScanner(input);
          solution.out = MyWriter.of(null);
          solution.bm = new Benchmark();
          solution.al = new Algorithm();
          solution.run();
          solution.close();
      }
  
      private abstract static class Solution {
          public MyScanner in;
          public MyWriter out;
          public Benchmark bm;
          public Algorithm al;
  
          public void init() {
          }
  
          public abstract void solve();
  
          protected boolean isMultiTest() {
              return true;
          }
  
          public void run() {
              init();
              if (isMultiTest()) {
                  int t = in.nextInt();
                  for (int i = 0; i < t; i++) {
                      solve();
                  }
              } else {
                  solve();
              }
          }
  
          public void close() {
              out.close();
          }
  
          public boolean isInteractive() {
              return false;
          }
      }
  
      private static class ASolution extends Solution {
          public void solve() {
              long n = in.nextLong();
              long k = in.nextLong();
              long count = 0;
              long have = 1;
              while (have <= k && have < n) {
                  have <<= 1;
                  count++;
              }
              long left = n - have;
              count += (left + k - 1) / k;
              out.println(count);
          }
      }
  
      private static class MyScanner {
          private final BufferedReader br;
          private StringTokenizer st;
  
          public MyScanner(String fileName) {
              if (fileName != null) {
                  try {
                      File file = new File(getClass().getClassLoader().getResource(fileName).getFile());
                      br = new BufferedReader(new FileReader(file));
                  } catch (FileNotFoundException e) {
                      throw new RuntimeException(e);
                  }
              } else {
                  br = new BufferedReader(new InputStreamReader(System.in));
              }
          }
  
          public String next() {
              while (st == null || !st.hasMoreElements()) {
                  st = new StringTokenizer(nextLine());
              }
              return st.nextToken();
          }
  
          public int nextInt() {
              return Integer.parseInt(next());
          }
  
          public long nextLong() {
              return Long.parseLong(next());
          }
  
          public String nextLine() {
              try {
                  String line = br.readLine();
                  if (line == null) {
                      throw new RuntimeException("empty line");
                  }
                  st = null;
                  return line;
              } catch (IOException e) {
                  throw new RuntimeException(e);
              }
          }
      }
  
      private static class Benchmark {
      }
  
      private static class Algorithm {
      }
  
      private static class MyWriter extends PrintWriter {
          public static MyWriter of(String fileName) {
              if (fileName != null) {
                  try {
                      return new MyWriter(new FileWriter(fileName));
                  } catch (IOException e) {
                      throw new RuntimeException(e);
                  }
              } else {
                  return new MyWriter(new BufferedOutputStream(System.out));
              }
          }
  
          public MyWriter(Writer writer) {
              super(writer);
          }
  
          public MyWriter(OutputStream out) {
              super(out);
          }
      }
  }