#include<bits/stdc++.h>
using namespace std;
#define N 500005
#define mp make_pair
#define INF 0x3f
struct edge{
int v,w;
};
int n,m,a,s;
vector<edge> g[N+N];
int dis[N+N],vis[N];
priority_queue<pair<int,int> > q;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a;
for(int j=1;j<=a;j++){
cin>>s;
g[i].push_back({n+s,0});
if(s!=1) g[n+s].push_back({i,1});
else g[n+s].push_back({i,0});
}
}
for(int i=1;i<=n+m;i++) dis[i]=INF;
q.push(mp(0,n+1));
dis[n+1]=0;
vis[n+1]=1;
while(!q.empty()){
int u=q.top().second;
vis[u]=1;
q.pop();
for(auto ed:g[u]){
int v=ed.v,w=ed.w;
if(vis[v]) continue;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push(mp(-dis[v],v));
}
}
}
if(dis[n+m]==INF) cout<<-1;
else cout<<dis[n+m];
return 0;
}
逆天wa