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: /*
    Challenge 1: Newbie to CM in 1year (Dec 2021 - Nov 2022)   🔥 5* Codechef
    Challenge 2: CM to IM in 1 year (Dec 2022 - Nov 2023)    🔥🔥 6* Codechef
    Challenge 3: IM to GM in 1 year (Dec 2023 - Nov 2024)  🔥🔥🔥 7* Codechef
    Goal: Become better in CP!
    Key: Consistency!
  */
  
  import java.util.*;
  import java.io.*;
  import java.math.*;
  
  public class Coder {
  
    static int n,m;
    static int mat[][];
    static int p[][];
    static StringBuffer str=new StringBuffer();
  
    static void solve(){
      int res[]=new int[n];
      for(int i=0;i<n;i++){
        int mx=1;
        for(int j=0;j<m;j++){
          mx=Math.max(mx, p[j][i]);
        }
        res[i]=mx;
      }
      long min=Integer.MAX_VALUE;
      for(int i=0;i<n;i++) min=Math.min(res[i], min);
      if(m<n) str.append(min).append("\n");
      else{
        long max=0;
        for(int i=0;i<m;i++){
          max=Math.max(max, mat[i][n-2]);
        }
        str.append(Math.min(max, min)).append("\n");
      }
    }
  
    public static void main(String[] args) throws java.lang.Exception {
      BufferedReader bf;
      PrintWriter pw;
      boolean lenv=false;
      if(lenv){
        bf = new BufferedReader(
                            new FileReader("input.txt"));
        pw=new PrintWriter(new
              BufferedWriter(new FileWriter("output.txt")));
      }else{
        bf = new BufferedReader(new InputStreamReader(System.in));
        pw = new PrintWriter(new OutputStreamWriter(System.out));
      }
      
      int q = Integer.parseInt(bf.readLine().trim());
      while (q-- > 0) {
        bf.readLine();
        String s[]=bf.readLine().trim().split("\\s+");
        m=Integer.parseInt(s[0]);
        n=Integer.parseInt(s[1]);
        mat=new int[m][n];
        p=new int[m][n];
        for(int i=0;i<m;i++){
          s=bf.readLine().trim().split("\\s+");
          List<Integer> l=new ArrayList<>();
          for(int j=0;j<n;j++){
            p[i][j]=Integer.parseInt(s[j]);
            l.add(p[i][j]);
          }
          Collections.sort(l);
          for(int j=0;j<n;j++){
            mat[i][j]=l.get(j);
          }
        }
        solve();
      }
      pw.println(str);
      pw.flush();
      // System.outin.print(str);
    }
  }