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 PYTHON):

Solution:

def get(a,b):
    if(a=='0' and b=='0'):
        return '0'
    else:
        return '1'

n,m=[int(x) for x in raw_input().split()]
L=[]

low=0
high=-1

for i in range(n):
    s=[int(x) for x in raw_input().split()]
    L.append(s)
    c=max(s)
    high=max(high,c)


ans=0
r1=''
r2=''

while(low<=high):
    mid=(low+high)>>1

    G=[]
    kk=dict()

    for i in range(0,len(L)):
        st=''
        for j in range(0,len(L[i])):
            if(L[i][j]<mid):
                st+='0'
            else:
                st+='1'

        if(kk.get(st)==None):
            kk[st]=1
            G.append(st)

    temp=0
    for i in range(0,len(G)):
        for j in range(i,len(G)):
            h=''
            for k in range(m):
                h+=get(G[i][k],G[j][k])
            if(h.count('0')==0):
                temp=1
                r1=G[i]
                r2=G[j]
                break

        if(temp==1):
            break

    if(temp==0):
        high=mid-1
    else:
        ans=mid
        low=mid+1


ptr1=1
ptr2=1
for i in range(0,len(L)):
    st=''
    for j in range(0,len(L[i])):
        if(L[i][j]<ans):
            st+='0'
        else:
            st+='1'

    if(st==r1):
        ptr1=i+1
    if(st==r2):
        ptr2=i+1

print ptr1,ptr2