#include <bits/stdc++.h>
using namespace std;
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
using ll = long long;
using P = pair<ll, ll>;
constexpr long double PI = 3.14159265358979323846264338327950288L;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
class DMinimaxProblem {
 public:
  void solve(istream& cin, ostream& cout) {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    vector<vector<int>> dp(n, vector<int>(m));
    for (int i = 0; i < (int)(n); i++) {
      for (int j = 0; j < (int)(m); j++) {
        cin >> dp[i][j];
      }
    }
    int mi = 0;
    int ma = INT_MAX;
    int ans1 = 1;
    int ans2 = 1;
    int r = 1 << m;
    while (mi + 1 < ma) {
      int med = (mi + ma) / 2;
      bool flag = false;
      vector<int> cnt(r, 0);
      for (int i = 0; i < (int)(n); i++) {
        int now = 0;
        for (int j = 0; j < (int)(m); j++) {
          now *= 2;
          if (dp[i][j] >= med) {
            now++;
          }
        }
        cnt[now] = i + 1;
      }
      for (int i = 0; i < r; i++) {
        if (cnt[i] == 0) continue;
        for (int j = 0; j < r; j++) {
          if (cnt[j] > 0 && (i | j) == r - 1) {
            flag = true;
            ans1 = cnt[i];
            ans2 = cnt[j];
            42;
            break;
          }
        }
        if (flag) break;
      }
      if (flag) {
        mi = med;
      } else {
        ma = med;
      }
    }
    42;
    cout << ans1 << ' ' << ans2 << endl;
  }
};
signed main() {
  DMinimaxProblem solver;
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  solver.solve(in, out);
  return 0;
}
