#include<bits/stdc++.h>
using namespace std;
int m,n,x,num,head[600],k[600];
string s;
struct edge{int to,next;}g[30000000];
queue<int>q;
void add(int u,int v){g[++num]=(edge){v,head[u]};head[u]=num;}
int main(){
cin>>m>>n;
getline(cin,s);
for(int t=1;t<=m;t++){
vector<int>p;
getline(cin,s);
for(int i=0;i<s.size();i++)
if(s[i]==' ') p.push_back(x),x=0;
else x=x*10+s[i]-'0';
p.push_back(x);
x=0;
for(int i=0;i<p.size()-1;i++)
for(int j=i+1;j<p.size();j++)
add(p[i],p[j]);
}
q.push(1);
k[1]=1;
while(!q.empty()){
int a=q.front();
q.pop();
for(int i=head[a];i;i=g[i].next)
if(!k[g[i].to]) k[g[i].to]=k[a]+1,q.push(g[i].to);
}
if(k[n]) cout<<k[n]-2;
else puts("NO");
return 0;
}
洛谷测评姬不让过啊o(╯□╰)o