#include<bits/stdc++.h>
using namespace std;
const int Maxn=300005;
int n,m,k,a,b,c,f,s,dis[Maxn],to[Maxn],w1[Maxn],head[Maxn],nxt[Maxn],tot;
bool vis[Maxn];
void AddEdge(int u,int v,int w) {
to[++tot]=v;
w1[tot]=w;
nxt[tot]=head[u];
head[u]=tot;
return;
}
void Dijkstar() {
priority_queue<int,vector<pair<int,int> >,greater<pair<int,int> > > Q;
Q.push(make_pair(0,f));
dis[f]=0;
while(Q.size()!=0) {
int t=Q.top().second;
Q.pop();
if(vis[t]==1) continue;
else vis[t]=1;
for(int i=head[t]; i; i=nxt[i]) {
if(dis[to[i]]>dis[t]+w1[i]&&vis[to[i]]==0) {
dis[to[i]]=dis[t]+w1[i];
Q.push(make_pair(dis[to[i]],to[i]));
}
}
}
}
signed main() {
memset(dis,0x3f,sizeof dis);
cin>>n>>m;
for(int i=1; i<=m; i++) {
cin>>a>>b;
AddEdge(a,b+m,1);
AddEdge(a+m,b+2*m,1);
AddEdge(a+2*m,b,1);
}
cin>>f>>s;
Dijkstar();
if(dis[s+2*m]!=dis[0])cout<<dis[s+2*m];
else cout<<-1;
return 0;
}