#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
inline int power(int a, int b) {
int x = 1;
while (b) {
if (b & 1) x *= a;
a *= a;
b >>= 1;
}
return x;
}
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
//_ ***************************** START Below *******************************
vector<vector<int>> a;
int count(int m, int mid ){
int ct = 0;
for(int i=0; i<m; i++){
int j = upper_bound(begin(a[i]), end(a[i]), mid) - begin(a[i]);
ct += j;
}
return ct;
}
//* Median of matrix sorted row wise
void consistency1(int m, int n) {
int k = m*n/2;
int s = 1, e = 1e9;
int ans = INT32_MAX;
while(s<=e){
int mid = s + (e-s)/2;
int ct = count(m, mid);
if(ct > k ){
ans = min(ans, mid);
e = mid-1;
}
else{
s = mid+1;
}
}
cout << ans << " ";
}
//* Median of matrix (sorted row wise)
//* Lock BS
//* [ 2 2 2 3 3 4 4 4 ]
//* F F F T T T T T
void consistency2(int m, int n) {
int k = m*n/2;
int s = 1, e = 1e9;
while(s<e){
int mid = s + (e-s)/2;
if(count(m, mid) > k ){
e = mid;
}
else{
s = mid+1;
}
}
cout << s << " ";
}
void solve() {
int m, n;
cin >> m >> n;
a.resize(m, vector<int>(n));
for(int i=0; i<m; i++)
for(int j=0; j<n; j++) cin >> a[i][j];
consistency1(m, n);
consistency2(m, n);
cout << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYikgewogICAgaW50IHggPSAxOwogICAgd2hpbGUgKGIpIHsKICAgICAgICBpZiAoYiAmIDEpIHggKj0gYTsKICAgICAgICBhICo9IGE7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB4Owp9CgoKY29uc3QgaW50IE0gPSAxMDAwMDAwMDA3Owpjb25zdCBpbnQgTiA9IDNlNSs5Owpjb25zdCBpbnQgSU5GID0gMmU5KzE7CmNvbnN0IGludCBMSU5GID0gMjAwMDAwMDAwMDAwMDAwMDAwMTsKCi8vXyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTVEFSVCBCZWxvdyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoKCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gYTsKCgppbnQgY291bnQoaW50IG0sIGludCBtaWQgKXsKICAgIGludCBjdCA9IDA7CiAgICBmb3IoaW50IGk9MDsgaTxtOyBpKyspewogICAgICAgIGludCBqID0gdXBwZXJfYm91bmQoYmVnaW4oYVtpXSksIGVuZChhW2ldKSwgbWlkKSAtIGJlZ2luKGFbaV0pOwogICAgICAgIGN0ICs9IGo7CiAgICB9CiAgICByZXR1cm4gY3Q7Cn0KCgoKLy8qIE1lZGlhbiBvZiBtYXRyaXggc29ydGVkIHJvdyB3aXNlCgp2b2lkIGNvbnNpc3RlbmN5MShpbnQgbSwgaW50IG4pIHsKCglpbnQgayA9IG0qbi8yOwoJCglpbnQgcyA9IDEsIGUgPSAxZTk7CgkKCWludCBhbnMgPSBJTlQzMl9NQVg7Cgl3aGlsZShzPD1lKXsKCSAgICBpbnQgbWlkID0gcyArIChlLXMpLzI7CgkgICAgCgkgICAgaW50IGN0ID0gY291bnQobSwgbWlkKTsKCSAgICBpZihjdCA+IGsgKXsKCSAgICAJYW5zID0gbWluKGFucywgbWlkKTsKCSAgICAgICAgZSA9IG1pZC0xOwoJICAgIH0KCSAgICBlbHNlewoJICAgICAgICBzID0gbWlkKzE7CgkgICAgfQoJfQkKCQoJY291dCA8PCBhbnMgPDwgIiAiOwoJCn0KCgoKLy8qIE1lZGlhbiBvZiBtYXRyaXggKHNvcnRlZCByb3cgd2lzZSkKCi8vKiBMb2NrIEJTCi8vKiAgIFsgIDIgICAyICAgMiAgIDMgICAzICAgNCAgIDQgICA0ICAgXQovLyogICAgICBGICAgRiAgIEYgICBUICAgVCAgIFQgICBUICAgVCAgIAoKCnZvaWQgY29uc2lzdGVuY3kyKGludCBtLCBpbnQgbikgewoKCWludCBrID0gbSpuLzI7CgkKCWludCBzID0gMSwgZSA9IDFlOTsKCQoJd2hpbGUoczxlKXsKCSAgICBpbnQgbWlkID0gcyArIChlLXMpLzI7CgkgICAgCgkgICAgaWYoY291bnQobSwgbWlkKSA+IGsgKXsKCSAgICAgICAgZSA9IG1pZDsKCSAgICB9CgkgICAgZWxzZXsKCSAgICAgICAgcyA9IG1pZCsxOwoJICAgIH0KCX0JCgkKCWNvdXQgPDwgcyA8PCAiICI7CgkKfQoKCnZvaWQgc29sdmUoKSB7CiAgICAKCWludCBtLCBuOwoJY2luID4+IG0gPj4gbjsKCQoJYS5yZXNpemUobSwgdmVjdG9yPGludD4obikpOwoJCglmb3IoaW50IGk9MDsgaTxtOyBpKyspCgkJZm9yKGludCBqPTA7IGo8bjsgaisrKSBjaW4gPj4gYVtpXVtqXTsKCQogICAgCiAgICBjb25zaXN0ZW5jeTEobSwgbik7CiAgICBjb25zaXN0ZW5jeTIobSwgbik7CiAgICBjb3V0IDw8IGVuZGw7CgkKfQoKCgoKCmludDMyX3QgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=