//
// main.cpp
// 最优乘车
//
// Created by Yeah on 14-7-21.
// Copyright (c) 2014年 Yeah. All rights reserved.
//
#include <iostream>
#include <vector>
usingnamespacestd;#define MAXN 30000
intmatrix[501][501];intDijkstra(intx,inty,intn)//求有 n 个点的图中,从 x 到 y 的最短路径
{inti(0),k(0),path[501],mark[501];intmin,dist[501];for(i=1;i<=n;i++){mark[i]=0;dist[i]=matrix[x][i];path[i]=x;}mark[x]=1;do{min=MAXN;k=0;for(i=1;i<=n;i++){if(mark[i]==0&&dist[i]<min){min=dist[i];k=i;}}if(k){mark[k]=1;for(i=1;i<=n;i++){if(matrix[k][i]<MAXN&&min+matrix[k][i]<dist[i]){dist[i]=min+matrix[k][i];path[i]=k;}}}}while(k);returndist[y];}intmain(){intN(0),M(0);while(cin>>M>>N){getchar();for(inti(1);i<=N;++i){for(intj(1);j<=N;++j){matrix[i][j]=MAXN;}}stringline;for(inti(0);i!=M;++i){vector<int>v;charnewline('\0');intx;while(newline!=10){scanf("%d",&x);v.push_back(x);newline=getchar();}for(vector<int>::iteratorit_from(v.begin());it_from!=v.end()-1;++it_from){for(vector<int>::iteratorit_to(it_from+1);it_to!=v.end();++it_to){matrix[*it_from][*it_to]=1;}}}intdis=Dijkstra(1,N,N);if(dis==MAXN){cout<<"NO"<<endl;}else{cout<<dis-1<<endl;}}return0;}