dijkstra
def dijkstra():
global g, d, st, n, m
for i in range(1, m + 1):
t = - 1
for j in range(1, m + 1):
if st[j] == False and (t == -1 or d[t] > d[j]):
t = j
st[t] = True
for j in range(1, m + 1):
if d[j] > d[t] + g[t][j]:
d[j] = d[t] + g[t][j]
if __name__ == '__main__':
n, m = map(int, input().split())
# print(n, m)
g = [[0x3f3f3f3f] * 510 for i in range(510)]
d = [0x3f3f3f3f] * 510
st = [False] * 510
for i in range(n):
l = list(map(int, input().split()))
for j in range(0, len(l)):
for k in range(j + 1, (len(l))):
if l[j] != l[k]:
g[l[j]][l[k]] = 1
# print(j, k, g[j][k])
d[1] = 0
dijkstra()
if d[m] == 0x3f3f3f3f:
print("NO")
elif m == 1:
print(0)
else:
print(d[m] - 1)
bfs
from collections import deque
def bfs():
global g, st, d, n, m
q = deque()
q.append(1)
d[1] = 0
while q:
t = q.popleft()
for i in range(1, m + 1):
if d[i] > d[t] + g[t][i]:
d[i] = d[t] + g[t][i]
if st[i] == False:
st[i] = True
q.append(i)
if __name__ == '__main__':
n, m = map(int, input().split())
g = [[0x3f3f3f3f] * 510 for i in range(510)]
d = [0x3f3f3f3f] * 510
st = [False] * 510
for i in range(n):
l = list(map(int, input().split()))
for j in range(len(l)):
for k in range(j + 1, len(l)):
if l[j] != l[k]:
g[l[j]][l[k]] = 1
bfs()
if m == 1:
print(0)
elif d[m] == 0x3f3f3f3f:
print('NO')
else:
print(d[m] - 1)