#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e2 + 5;
int n, k;
int a[N][N];
int p[N], sz[N];
void initSet() {
for (int u = 1; u <= n; u++) {
p[u] = u;
sz[u] = 1;
}
}
int findSet(int u) {
if (p[u] == u) return u;
return p[u] = findSet(p[u]);
}
bool unionSet(int u, int v) {
u = findSet(u);
v = findSet(v);
if (u == v) return false;
if (sz[u] < sz[v]) swap(u, v);
p[v] = u;
sz[u] += sz[v];
return true;
}
// Có tồn tại cách chia n quân bài thành ít nhất k phần sao cho S >= mid
// S = min(a(u, v)) với quân bài u, v ở hai phần khác nhau
// Để S >= mid hay min(a(u, v)) >= mid
// Thì a(u, v) >= mid (với mọi u, v ở hai phần khác nhau)
bool check(int mid) {
initSet();
// Những cặp (u, v) sao cho a[u][v] < mid phải ở chung một phần
int cnt = n;
for (int u = 1; u + 1 <= n; u++) {
for (int v = u + 1; v <= n; v++) {
if (a[u][v] < mid) cnt -= unionSet(u, v);
}
}
return (cnt >= k);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
for (int u = 1; u <= n; u++) {
for (int v = 1; v <= n; v++) cin >> a[u][v];
}
int l = 0, r = 32767, ans = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) {
ans = mid;
l = mid + 1;
}
else {
r = mid - 1;
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAyZTIgKyA1OyAKCmludCBuLCBrOyAgIAppbnQgYVtOXVtOXTsgIAoKaW50IHBbTl0sIHN6W05dOyAgCgp2b2lkIGluaXRTZXQoKSB7Cglmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKCQlwW3VdID0gdTsgIAoJCXN6W3VdID0gMTsgCgl9Cn0KCmludCBmaW5kU2V0KGludCB1KSB7CglpZiAocFt1XSA9PSB1KSByZXR1cm4gdTsgIAoJcmV0dXJuIHBbdV0gPSBmaW5kU2V0KHBbdV0pOyAKfQoKYm9vbCB1bmlvblNldChpbnQgdSwgaW50IHYpIHsKCXUgPSBmaW5kU2V0KHUpOyAKCXYgPSBmaW5kU2V0KHYpOyAKCWlmICh1ID09IHYpIHJldHVybiBmYWxzZTsgCglpZiAoc3pbdV0gPCBzelt2XSkgc3dhcCh1LCB2KTsgCglwW3ZdID0gdTsgICAKCXN6W3VdICs9IHN6W3ZdOyAKCXJldHVybiB0cnVlOyAKfQoKLy8gQ8OzIHThu5NuIHThuqFpIGPDoWNoIGNoaWEgbiBxdcOibiBiw6BpIHRow6BuaCDDrXQgbmjhuqV0IGsgcGjhuqduIHNhbyBjaG8gUyA+PSBtaWQKLy8gUyA9IG1pbihhKHUsIHYpKSB24bubaSBxdcOibiBiw6BpIHUsIHYg4bufIGhhaSBwaOG6p24ga2jDoWMgbmhhdQovLyDEkOG7gyBTID49IG1pZCBoYXkgbWluKGEodSwgdikpID49IG1pZAovLyBUaMOsIGEodSwgdikgPj0gbWlkICh24bubaSBt4buNaSB1LCB2IOG7nyBoYWkgcGjhuqduIGtow6FjIG5oYXUpCmJvb2wgY2hlY2soaW50IG1pZCkgewoJaW5pdFNldCgpOyAgCgkKCS8vIE5o4buvbmcgY+G6t3AgKHUsIHYpIHNhbyBjaG8gYVt1XVt2XSA8IG1pZCBwaOG6o2kg4bufIGNodW5nIG3hu5l0IHBo4bqnbgoJaW50IGNudCA9IG47ICAgIAkKCWZvciAoaW50IHUgPSAxOyB1ICsgMSA8PSBuOyB1KyspIHsKCQlmb3IgKGludCB2ID0gdSArIDE7IHYgPD0gbjsgdisrKSB7CgkJCWlmIChhW3VdW3ZdIDwgbWlkKSBjbnQgLT0gdW5pb25TZXQodSwgdik7IAoJCX0KCX0KCglyZXR1cm4gKGNudCA+PSBrKTsgIAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiBrOyAKCglmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKCQlmb3IgKGludCB2ID0gMTsgdiA8PSBuOyB2KyspIGNpbiA+PiBhW3VdW3ZdOyAKCX0KCglpbnQgbCA9IDAsIHIgPSAzMjc2NywgYW5zID0gLTE7IAoJd2hpbGUgKGwgPD0gcikgewoJCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoKCQlpZiAoY2hlY2sobWlkKSkgewoJCQlhbnMgPSBtaWQ7ICAKCQkJbCA9IG1pZCArIDE7IAoJCX0KCQllbHNlIHsKCQkJciA9IG1pZCAtIDE7ICAKCQl9Cgl9CgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0=