description: You are given two integers l and r, l≤ r. Find the largest possible value of a mod b over all pairs (a, b) of integers for which r≥ a ≥ b ≥ l.
  
  As a reminder, a mod b is a remainder we get when dividing a by b. For example, 26 mod 8 = 2.
  
  Input
  
  Each test contains multiple test cases.
  
  The first line contains one positive integer t (1≤ t≤ 10^4), denoting the number of test cases. Description of the test cases follows.
  
  The only line of each test case contains two integers l, r (1≤ l ≤ r ≤ 10^9).
  
  Output
  
  For every test case, output the largest possible value of a mod b over all pairs (a, b) of integers for which r≥ a ≥ b ≥ l.
  
  Example
  
  Input
  
  
  4
  1 1
  999999999 1000000000
  8 26
  1 999999999
  
  
  Output
  
  
  0
  1
  12
  499999999
  
  Note
  
  In the first test case, the only allowed pair is (a, b) = (1, 1), for which a mod b = 1 mod 1 = 0.
  
  In the second test case, the optimal choice is pair (a, b) = (1000000000, 999999999), for which a mod b = 1.
solution: import javax.xml.transform.sax.SAXResult;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.util.*;
  
  public class A {
      static List<Integer> [] adj;
      static ArrayList<Integer> temp;
      static int mod = (int) 1e9+7;
      static boolean[] vis = new boolean[(int)1e5];
      static List<Integer> l = new ArrayList<>();
      static final Reader s = new Reader();
  
      public static void main(String[] args) throws IOException {
          int t = s.nextInt();
  //        int t = 1;
          while (t-- > 0) {
              long l = s.nextLong();
              long r = s.nextLong();
              if(r<2*l){
                  System.out.println(r-l);
              }
              else System.out.println((r-1)/2);
          }
      }
      //Important
      //Dont't stick on same approach
      //Check long
  
      static void dfs(int i){
          vis[i]=true;
          l.add(i);
          List<Integer> Y = adj[i];
          for(int x:Y){
              if(!vis[x])dfs(x);
          }
      }
  
      static long gcd(long a, long b) throws IOException {
          return (b == 0) ? a : gcd(b, a % b);
      }
  
      static int gcd(int a, int b) throws IOException {
          return (b == 0) ? a : gcd(b, a % b);
      }
  
      static void sortr(int[] a) {
          ArrayList<Integer> l = new ArrayList<>();
          for (int i : a)
              l.add(i);
          Collections.sort(l, Collections.reverseOrder());
          for (int i = 0; i < a.length; i++)
              a[i] = l.get(i);
      }
  
      static void sortr(long[] a) {
          ArrayList<Long> l = new ArrayList<>();
          for (long i : a)
              l.add(i);
          Collections.sort(l, Collections.reverseOrder());
          for (int i = 0; i < a.length; i++)
              a[i] = l.get(i);
      }
  
      static void sort(int[] a) {
          ArrayList<Integer> l = new ArrayList<>();
          for (int i : a)
              l.add(i);
          Collections.sort(l);
          for (int i = 0; i < a.length; i++)
              a[i] = l.get(i);
      }
  
      static void sort(long[] a) {
          ArrayList<Long> l = new ArrayList<>();
          for (long i : a)
              l.add(i);
          Collections.sort(l);
          for (int i = 0; i < a.length; i++)
              a[i] = l.get(i);
      }
  
      static class Reader {
          BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
          StringTokenizer st;
          String next() {
              while(st==null||!st.hasMoreTokens()) {
                  try {
                      st=new StringTokenizer(in.readLine());
                  } catch(Exception e) {}
              }
              return st.nextToken();
          }
          int nextInt() {
              return Integer.parseInt(next());
          }
          long nextLong() {
              return Long.parseLong(next());
          }
      }
  
  }
  