Problem: You are given n arrays a_1, a_2, ..., a_n; each array consists of exactly m integers. We denote the y-th element of the x-th array as a_{x, y}.

You have to choose two arrays a_i and a_j (1 ≤ i, j ≤ n, it is possible that i = j). After that, you will obtain a new array b consisting of m integers, such that for every k ∈ [1, m] b_k = max(a_{i, k}, a_{j, k}).

Your goal is to choose i and j so that the value of min _{k = 1}^{m} b_k is maximum possible.

Input

The first line contains two integers n and m (1 ≤ n ≤ 3 ⋅ 10^5, 1 ≤ m ≤ 8) — the number of arrays and the number of elements in each array, respectively.

Then n lines follow, the x-th line contains the array a_x represented by m integers a_{x, 1}, a_{x, 2}, ..., a_{x, m} (0 ≤ a_{x, y} ≤ 10^9).

Output

Print two integers i and j (1 ≤ i, j ≤ n, it is possible that i = j) — the indices of the two arrays you have to choose so that the value of min _{k = 1}^{m} b_k is maximum possible. If there are multiple answers, print any of them.

Example

Input


6 5
5 0 3 1 2
1 8 9 1 3
1 2 3 4 5
9 1 0 3 7
2 3 0 6 3
6 4 1 7 0


Output


1 5

Solution (in PYTHON3):

Solution:
"""
NTC here
"""
import sys
inp= sys.stdin.readline
input = lambda : inp().strip()
flush= sys.stdout.flush
# import threading
# setrecursionlimit(10**6)
# threading.stack_size(2**26)

def iin(): return int(input())
def lin(): return list(map(int, input().split()))

# range = xrange
# input = raw_input


def main():
    n, m =lin()
    a = [lin() for i in range(n)]

    sl = 2**m-1

    l, r = 0, 10**9
    sol = [1, 1]
    sol1 = 0
    while l<r:
        #print(l, r)
        md = (l+r+1)>>1
        ans1 = 0
        done = 1

        a2 = [0]*(sl+1)
        for i in range(n):
            ch = 0
            for j in range(m):
                ch = (ch<<1) + (a[i][j]>=md)
            a2[ch] = i+1
        #print(a1)
        for i in range(sl+1):
            if done:
                if a2[i]:
                    for j in range(i+1):
                        if a2[j] and i|j == sl:
                            done = 0
                            ans1 = [a2[i], a2[j]]
            else:
                break
        
        if ans1:
            # print(md , "ans")
            if sol1<md:
                sol1 = md
                sol = ans1
            l = md
        else:
            r = md-1
    print (sol[0], sol[1])














        
main()
#threading.Thread(target=main).start()