#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m, t, s, mn[N], mx[N], dg[N], dis[N];
vector<int> gr[N];
void findAns() {
  set<pair<int, int> > s;
  dis[t] = 0;
  s.insert({dis[t], t});
  while (!s.empty()) {
    auto p = *s.begin();
    s.erase(s.begin());
    int v = p.second;
    for (auto u : gr[v]) {
      mx[u] = max(mx[u], dis[v]);
      mn[u] = min(mn[u], dis[v] + 1);
      dg[u]--;
      if (!dg[u]) {
        if (dis[u] > min(mn[u], mx[u])) {
          s.erase({dis[u], u});
          dis[u] = min(mn[u], mx[u]);
          s.insert({dis[u], u});
        }
      } else {
        if (dis[u] > mn[u]) {
          s.erase({dis[u], u});
          dis[u] = mn[u];
          s.insert({dis[u], u});
        }
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    gr[y].push_back(x);
    dg[x]++;
  }
  memset(mn, 127, sizeof(mn));
  memset(dis, 127, sizeof(dis));
  cin >> s >> t;
  s--, t--;
  findAns();
  if (dis[s] > n + 1)
    cout << -1;
  else
    cout << dis[s];
  return 0;
}
