m,n=input().split()
m=int(m)
n=int(n)
ls=[]
lt=[]
dp=[]
#输入并转换为数值列表
for i in range(m):
a=list(input().split())
for j in range(n):
a[j]=int(a[j])
ls.append(a)
#选每行最大值
for i in range(m):
b=max(ls[i])
#判断有无重复最大值
if ls[i].count(b)==1:
c=ls[i].index(b)
#选列最小值
for k in range(m):
lt.append(ls[k][c])
d=min(lt)
#判断该点是否为鞍点
if b==d:
dp.append([b,i+1,c+1])
lt.clear()
#再判断重复为二,步骤同上
elif ls[i].count(b)==2:
c=ls[i].index(b)
for k in range(m):
lt.append(ls[k][c])
d=min(lt)
if b==d:
dp.append([b,i+1,c+1])
lt.clear()
ls[i][c]=0
o=max(ls[i])
p=ls[i].index(o)
for k in range(m):
lt.append(ls[k][p])
d=min(lt)
if b==d:
dp.append([b,i+1,p+1])
lt.clear()
#判断有无鞍点
if len(dp)==0:
print('No answer')
else:
#将数值列表转换成字符串列表,再将列表转换成字符串输出
for i in dp:
i=[str(g) for g in i]
j=' '.join(i)
print(j)