object Main extends App {
  val sc = new java.util.Scanner(System.in)
  val q = sc.nextInt()
  val ab = List.fill(q)((sc.nextInt(), sc.nextInt()))

  val pw = new java.io.PrintWriter(Console.out)
  for ((a, b) <- ab) {
    val x = a.min(b)
    val y = a.max(b)
    val score = x.toLong * y

    def binSearch(begin: Int, end: Int): Int = {
      def check(k: Int): Boolean = {
        def maxProd(l: Int, r: Int, sum: Int): Long = {
          if (l > r) {
            Int.MinValue
          } else if (sum % 2 == 0) {
            if (r < sum / 2) {
              r.toLong * (sum - r)
            } else if (sum / 2 < l) {
              l.toLong * (sum - l)
            } else {
              (sum.toLong * sum) / 4
            }
          } else {
            if (r < sum / 2) {
              r.toLong * (sum - r)
            } else if (sum / 2 + 1 < l) {
              l.toLong * (sum - l)
            } else {
              (sum.toLong / 2) * ((sum / 2) + 1)
            }
          }
        }

        val mp = if (k < x) {
          maxProd(1, k, k+1)
        } else if (k < y) {
          maxProd(1, x-1, k+1).max(maxProd(a+1, k+1, k+2))
        } else if (k < x + y - 2) {
          maxProd(1, k-b+1, k+2).max(maxProd(k-b+2, a-1, k+1)).max(maxProd(a+1, k+1, k+2))
        } else {
          maxProd(1, a-1, k+2).max(maxProd(a+1, k-b+1, k+3)).max(maxProd(k-b+3, k+1, k+2))
        }
        
        mp < score
      }

      if (end - begin <= 1) {
        begin
      } else {
        val m = begin + (end - begin) / 2
        if (check(m)) binSearch(m, end) else binSearch(begin, m)
      }
    }

    pw.println(if (y == 1) 0 else binSearch(0, 2 * y))
  }
  pw.flush()
}
