#include <bits/stdc++.h>
using namespace std;
#include <iostream>
#define Sa7afy_H333 ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define Time cerr << "Time Taken: " << (float)clock() / CLOCKS_PER_SEC << " Secs" << "\n";
#define cin(v) for (auto&i:v) cin >> i;
#define cout(v) for (auto&i:v) cout << i << " ";cout<<e;
#include <algorithm>
#include <vector>
#define ll long long int
#define e '\n'
#define PI acos(-1)
#define PHI (long double)1.61803398875 //golden ratio
#define sin(a) sin((a)*PI/180)
#define cos(a) cos((a)*PI/180)
#define tan(a) tan((a)*PI/180)
#define eb emplace_back
#define ones(x) __builtin_popcountll(x)
#define all(v) v.begin(), v.end()
#define allr(v) v.rbegin(), v.rend()
#define pii pair<ll,ll>
#define vi vector<int>
#define vll vector<ll>
using std::cout;
using std::array; using std::fill;
using std::fill_n;
#include <set>
#include <deque>
#define d2v vector<vector<int>>
typedef pair<int,int> Pii;
#define pb push_back
const int mod = 1e9+7;
ll mult(ll a, ll b){ return ((a % mod) * (b % mod)) % mod; }
ll add(ll a, ll b) { return ((a % mod) + (b % mod)) % mod; }
ll sub(ll a, ll b) { return ((a % mod) - (b % mod) + mod) % mod; }
const int N = 4e5+10;
const int N2=2e5+10;
const ll INF = 1e18;
vector<pair<int, int>> adj[N2];
vector<int>spf(N+1);
vector<int> pr;
void build() {
for (int i = 2; i <= N; ++i) {
if (spf[i] == 0) {
spf[i] = i;
pr.push_back(i);
}
for (int j = 0; i * pr[j] <= N; ++j) {
spf[i * pr[j]] = pr[j];
if (pr[j] == spf[i]) {
break;
}
}
}
}
ll pw (ll n,ll ex) {
if (ex == 0)return 1;
ll res = pw(n, ex / 2);
res = (res*res);
if (ex & 1) {
res = (res * n);
}
return res ;
}
ll divsum(ll n) {
map<int, int> facts;
while (n > 1) {
int p = spf[n];
facts[p]++;
n /= p;
}
ll ans = 1;
for (auto x: facts)
ans *= (pw(x.first, x.second + 1) - 1) / (x.first - 1);
return ans;
}
void solve() {
ll n, m, x, y, s, f;
cin >> n >> m >> s >> f;
for (int i = 0; i < m; i++) {
cin >> x >> y;
adj[x].eb(y, 0);
adj[y].eb(x, divsum(x + y));
}
vector<ll> dis(n + 1, INF);
dis[s] = 0;
priority_queue<pii, vector<pii >, greater<pii>> q;
q.push({0, s});
while (!q.empty()) {
int v = q.top().second;
int d_v = q.top().first;
q.pop();
for (auto ed: adj[v]) {
int to = ed.first, len = ed.second;
if (dis[v] + len < dis[to]) {
dis[to] = dis[v] + len;
q.push({dis[to], to});
}
}
}
if (dis[f] == INF) {
cout << -1 << e;
} else cout << dis[f] << e;
}
signed main() {
build();
Sa7afy_H333
int tests = 1;
//cin >> tests;
for (int i = 1; i <= tests; i++) {
/*cout<<"Case #"<<i<<": ";*/
solve();
}
Time
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2RlZmluZSBTYTdhZnlfSDMzMyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgVGltZSBjZXJyIDw8ICJUaW1lIFRha2VuOiAiIDw8IChmbG9hdCljbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIiBTZWNzIiA8PCAiXG4iOwojZGVmaW5lIGNpbih2KSBmb3IgKGF1dG8maTp2KSBjaW4gPj4gaTsKI2RlZmluZSBjb3V0KHYpIGZvciAoYXV0byZpOnYpIGNvdXQgPDwgaSA8PCAiICI7Y291dDw8ZTsKI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2RlZmluZSBsbCBsb25nIGxvbmcgaW50CiNkZWZpbmUgZSAnXG4nCiNkZWZpbmUgUEkgYWNvcygtMSkKI2RlZmluZSBQSEkgKGxvbmcgZG91YmxlKTEuNjE4MDMzOTg4NzUgLy9nb2xkZW4gcmF0aW8KI2RlZmluZSBzaW4oYSkgc2luKChhKSpQSS8xODApCiNkZWZpbmUgY29zKGEpIGNvcygoYSkqUEkvMTgwKQojZGVmaW5lIHRhbihhKSB0YW4oKGEpKlBJLzE4MCkKI2RlZmluZSAgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgb25lcyh4KSBfX2J1aWx0aW5fcG9wY291bnRsbCh4KQojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSBhbGxyKHYpIHYucmJlZ2luKCksIHYucmVuZCgpCiNkZWZpbmUgcGlpIHBhaXI8bGwsbGw+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSB2bGwgdmVjdG9yPGxsPgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6YXJyYXk7IHVzaW5nIHN0ZDo6ZmlsbDsKdXNpbmcgc3RkOjpmaWxsX247CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxkZXF1ZT4KI2RlZmluZSBkMnYgdmVjdG9yPHZlY3RvcjxpbnQ+Pgp0eXBlZGVmIHBhaXI8aW50LGludD4gUGlpOwojZGVmaW5lICBwYiBwdXNoX2JhY2sKIApjb25zdCBpbnQgbW9kID0gMWU5Kzc7CmxsIG11bHQobGwgYSwgbGwgYil7IHJldHVybiAoKGEgJSBtb2QpICogKGIgJSBtb2QpKSAlIG1vZDsgfQpsbCBhZGQobGwgYSwgbGwgYikgeyByZXR1cm4gKChhICUgbW9kKSArIChiICUgbW9kKSkgJSBtb2Q7IH0KbGwgc3ViKGxsIGEsIGxsIGIpIHsgcmV0dXJuICgoYSAlIG1vZCkgLSAoYiAlIG1vZCkgKyBtb2QpICUgbW9kOyB9CiAKY29uc3QgaW50IE4gPSA0ZTUrMTA7CmNvbnN0IGludCBOMj0yZTUrMTA7CmNvbnN0IGxsIElORiA9IDFlMTg7CnZlY3RvcjxwYWlyPGludCwgaW50Pj4gYWRqW04yXTsKdmVjdG9yPGludD5zcGYoTisxKTsKdmVjdG9yPGludD4gcHI7CiAKdm9pZCBidWlsZCgpIHsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IE47ICsraSkgewogICAgICAgIGlmIChzcGZbaV0gPT0gMCkgewogICAgICAgICAgICBzcGZbaV0gPSBpOwogICAgICAgICAgICBwci5wdXNoX2JhY2soaSk7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGogPSAwOyBpICogcHJbal0gPD0gTjsgKytqKSB7CiAgICAgICAgICAgIHNwZltpICogcHJbal1dID0gcHJbal07CiAgICAgICAgICAgIGlmIChwcltqXSA9PSBzcGZbaV0pIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CiAKbGwgcHcgKGxsIG4sbGwgZXgpIHsKICAgIGlmIChleCA9PSAwKXJldHVybiAxOwogICAgbGwgcmVzID0gcHcobiwgZXggLyAyKTsKICAgIHJlcyA9IChyZXMqcmVzKTsKICAgIGlmIChleCAmIDEpIHsKICAgICAgICByZXMgPSAocmVzICogbik7CiAgICB9CiAgICByZXR1cm4gcmVzIDsKfQogCmxsIGRpdnN1bShsbCBuKSB7CiAgICBtYXA8aW50LCBpbnQ+IGZhY3RzOwogICAgd2hpbGUgKG4gPiAxKSB7CiAgICAgICAgaW50IHAgPSBzcGZbbl07CiAgICAgICAgZmFjdHNbcF0rKzsKICAgICAgICBuIC89IHA7CiAgICB9CiAgICBsbCBhbnMgPSAxOwogICAgZm9yIChhdXRvIHg6IGZhY3RzKQogICAgICAgIGFucyAqPSAocHcoeC5maXJzdCwgeC5zZWNvbmQgKyAxKSAtIDEpIC8gKHguZmlyc3QgLSAxKTsKICAgIHJldHVybiBhbnM7Cn0KIAogCnZvaWQgc29sdmUoKSB7CiAgICBsbCBuLCBtLCB4LCB5LCBzLCBmOwogICAgY2luID4+IG4gPj4gbSA+PiBzID4+IGY7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgYWRqW3hdLmViKHksIDApOwogICAgICAgIGFkalt5XS5lYih4LCBkaXZzdW0oeCArIHkpKTsKICAgIH0KICAgIHZlY3RvcjxsbD4gZGlzKG4gKyAxLCBJTkYpOwogICAgZGlzW3NdID0gMDsKICAgIHByaW9yaXR5X3F1ZXVlPHBpaSwgdmVjdG9yPHBpaSA+LCBncmVhdGVyPHBpaT4+IHE7CiAgICBxLnB1c2goezAsIHN9KTsKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHYgPSBxLnRvcCgpLnNlY29uZDsKICAgICAgICBpbnQgZF92ID0gcS50b3AoKS5maXJzdDsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGZvciAoYXV0byBlZDogYWRqW3ZdKSB7CiAgICAgICAgICAgIGludCB0byA9IGVkLmZpcnN0LCBsZW4gPSBlZC5zZWNvbmQ7CiAgICAgICAgICAgIGlmIChkaXNbdl0gKyBsZW4gPCBkaXNbdG9dKSB7CiAgICAgICAgICAgICAgICBkaXNbdG9dID0gZGlzW3ZdICsgbGVuOwogICAgICAgICAgICAgICAgcS5wdXNoKHtkaXNbdG9dLCB0b30pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKGRpc1tmXSA9PSBJTkYpIHsKICAgICAgICBjb3V0IDw8IC0xIDw8IGU7CiAgICB9IGVsc2UgY291dCA8PCBkaXNbZl0gPDwgZTsKfQogCiAKc2lnbmVkIG1haW4oKSB7CiAgICBidWlsZCgpOwogICAgU2E3YWZ5X0gzMzMKICAgIGludCB0ZXN0cyA9IDE7CiAgICAvL2NpbiA+PiB0ZXN0czsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHRlc3RzOyBpKyspIHsKICAgICAgICAvKmNvdXQ8PCJDYXNlICMiPDxpPDwiOiAiOyovCiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIFRpbWUKfQo=