description: Vlad has n friends, for each of whom he wants to buy one gift for the New Year.
  
  There are m shops in the city, in each of which he can buy a gift for any of his friends. If the j-th friend (1 ≤ j ≤ n) receives a gift bought in the shop with the number i (1 ≤ i ≤ m), then the friend receives p_{ij} units of joy. The rectangular table p_{ij} is given in the input.
  
  Vlad has time to visit at most n-1 shops (where n is the number of friends). He chooses which shops he will visit and for which friends he will buy gifts in each of them.
  
  Let the j-th friend receive a_j units of joy from Vlad's gift. Let's find the value α=min\\{a_1, a_2, ..., a_n\}. Vlad's goal is to buy gifts so that the value of α is as large as possible. In other words, Vlad wants to maximize the minimum of the joys of his friends.
  
  For example, let m = 2, n = 2. Let the joy from the gifts that we can buy in the first shop: p_{11} = 1, p_{12}=2, in the second shop: p_{21} = 3, p_{22}=4.
  
  Then it is enough for Vlad to go only to the second shop and buy a gift for the first friend, bringing joy 3, and for the second — bringing joy 4. In this case, the value α will be equal to min\{3, 4\} = 3
  
  Help Vlad choose gifts for his friends so that the value of α is as high as possible. Please note that each friend must receive one gift. Vlad can visit at most n-1 shops (where n is the number of friends). In the shop, he can buy any number of gifts.
  
  Input
  
  The first line of the input contains an integer t (1 ≤ t ≤ 10^4) — the number of test cases in the input.
  
  An empty line is written before each test case. Then there is a line containing integers m and n (2 ≤ n, 2 ≤ n ⋅ m ≤ 10^5) separated by a space — the number of shops and the number of friends, where n ⋅ m is the product of n and m.
  
  Then m lines follow, each containing n numbers. The number in the i-th row of the j-th column p_{ij} (1 ≤ p_{ij} ≤ 10^9) is the joy of the product intended for friend number j in shop number i.
  
  It is guaranteed that the sum of the values n ⋅ m over all test cases in the test does not exceed 10^5.
  
  Output
  
  Print t lines, each line must contain the answer to the corresponding test case — the maximum possible value of α, where α is the minimum of the joys from a gift for all of Vlad's friends.
  
  Example
  
  Input
  
  
  5
  
  2 2
  1 2
  3 4
  
  4 3
  1 3 1
  3 1 1
  1 2 2
  1 1 3
  
  2 3
  5 3 4
  2 5 1
  
  4 2
  7 9
  8 1
  9 6
  10 8
  
  2 4
  6 5 2 1
  7 9 7 2
  
  
  Output
  
  
  3
  2
  4
  8
  2
solution: import java.io.*;
  import java.util.*;
  public class Main {
      private static final MyWriter writer = new MyWriter();
      private static final MyReader scan = new MyReader();
      public static void main(String[] args) throws IOException {
          int q = scan.nextInt(); while (q-- > 0)
              solve(); writer.close();
      }
  
      private static void solve() throws IOException {
          int shop = scan.nextInt();
          int friend = scan.nextInt();
          int[][] arr = new int[shop][friend];
          int l = Integer.MAX_VALUE;
          int r = Integer.MIN_VALUE;
          for (int i = 0; i < shop; i++) {
              for (int j = 0; j < friend; j++) {
                  arr[i][j] = scan.nextInt();
                  l = Math.min(arr[i][j], l);
                  r = Math.max(arr[i][j], r);
              }
          }
          int res = -1;
          while (l <= r) {
              int mid = (l + r) >> 1;
              boolean yes = isValid(arr, mid);
              if (yes) {
                  res = mid;
                  l = mid + 1;
              } else {
                  r = mid - 1;
              }
          }
          writer.println(res);
      }
  
      private static boolean isValid(int[][] arr, int tar) {
          int shop = arr.length;
          int friend = arr[0].length;
          boolean[] yes = new boolean[friend];
          boolean ok = false;
          for (int i = 0; i < shop; i++) {
              boolean isT = false;
              for (int j = 0; j < friend; j++) {
                  if (arr[i][j] >= tar) {
                      yes[j] = true;
                      if (isT) ok = true;
                      else isT = true;
                  }
              }
          }
          if (ok) {
              for (int i = 0; i < yes.length; i++) {
                  if (!yes[i]) return false;
              }
          } else return false;
          return true;
      }
  
  
  }
  
  
  
  class MyWriter implements Closeable {
      private BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
      public void print(Object object) throws IOException { writer.write(object.toString()); }
      public void println(Object object) throws IOException { writer.write(object.toString());writer.write(System.lineSeparator()); }
      public void close() throws IOException { writer.close(); }
  }
  class MyReader {
      private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
      private StringTokenizer tokenizer = new StringTokenizer("");
      private String innerNextLine() { try { return reader.readLine(); } catch (IOException ex) { return null;}}
      public boolean hasNext() { while (!tokenizer.hasMoreTokens()) { String nextLine = innerNextLine();if (nextLine == null) return false;tokenizer = new StringTokenizer(nextLine); }return true; }
      public String nextLine() { tokenizer = new StringTokenizer("");return innerNextLine(); }
      public String next() { hasNext();return tokenizer.nextToken(); }
      public int nextInt() { return Integer.parseInt(next()); }
      public long nextLong() { return Long.parseLong(next()); }
      public double nextDouble() { return Double.parseDouble(next()); }
  }