← Home
```go
package main

import (
	"fmt"
	"io"
	"math/bits"
	"os"
)

func main() {
	buf, _ := io.ReadAll(os.Stdin)
	var pos int
	readInt := func() int {
		for pos < len(buf) && buf[pos] <= ' ' {
			pos++
		}
		if pos >= len(buf) {
			return 0
		}
		res := 0
		for pos < len(buf) && buf[pos] > ' ' {
			res = res*10 + int(buf[pos]-'0')
			pos++
		}
		return res
	}

	n := readInt()
	m := readInt()
	if n == 0 || m == 0 {
		return
	}

	a := make([][]int, n)
	for i := 0; i < n; i++ {
		a[i] = make([]int, m)
		for j := 0; j < m; j++ {
			a[i][j] = readInt()
		}
	}

	numWords := (m + 63) / 64
	bitsets := make([][]uint64, n)
	for i := 0; i < n; i++ {
		bitsets[i] = make([]uint64, numWords)
	}

	check := func(v int) bool {
		for i := 0; i < n; i++ {
			for w := 0; w < numWords; w++ {
				bitsets[i][w] = 0
			}
			for j := 0; j < m; j++ {
				if a[i][j] >= v {
					bitsets[i][j/64] |= 1 << (j % 64)
				}
			}
		}
		for i := 0; i < n; i++ {
			for j := i + 1; j < n; j++ {
				cnt := 0
				for w := 0; w < numWords; w++ {
					cnt += bits.OnesCount64(bitsets[i][w] & bitsets[j][w])
					if cnt >= 2 {
						return true
					}
				}
			}
		}
		return false
	}

	low, high := 0, 1000000000
	ans := 0
	for low <= high {
		mid := low + (high-low)/2
		if check(mid) {
			ans = mid
			low = mid + 1
		} else {
			high = mid - 1
		}
	}
	fmt.Println(ans)
}
```