#include <iostream>
#include<vector>
#include<queue>
#include<set>
#include<map>
using namespace std;
#define max 100001
map<int,bool>visit;
map<int,int> revcnt;
vector<int> v[max];
set<int> s[max];
int main()
{
int n,edges,i,c;
cin>>n>>edges;
for(i=0;i<=n;i++)
{
visit[i]=0;
revcnt[i]=max;
v[i].clear();
}
int x,y;
while(edges--)
{
cin>>x>>y;
s[x].insert(y);
v[x].push_back(y);
v[y].push_back(x);
}
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > Q;
Q.push(make_pair(0,1));
visit[1]=0;
revcnt[1]=0;
while(!Q.empty())
{
pair<int,int> p=Q.top();
Q.pop();
if(!visit[p.second])
{
visit[p.second]=1;
if(p.second==n)
{
cout<<p.first<<endl;
break;
}
else
{
for(int i=0;i<(int)v[p.second].size(); i++)
{
int key=v[p.second][i];
if(!visit[key])
{
if(s[p.second].find(key)!=s[p.second].end())
{
c=p.first+0; // i.e. an edge already exists
if(c<revcnt[key])
revcnt[key]=c;
}
else
{
c=p.first+1; // i.e. we need to reverse an edge
if(c<revcnt[key])
revcnt[key]=c;
}
Q.push(make_pair(revcnt[key],key));
}
}
}
}
}
if(revcnt[n]==max)
cout<<"-1"<<endl;
//else
//cout<<revcnt[n]<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPG1hcD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBtYXggMTAwMDAxCiAKbWFwPGludCxib29sPnZpc2l0OwptYXA8aW50LGludD4gcmV2Y250Owp2ZWN0b3I8aW50PiB2W21heF07CnNldDxpbnQ+IHNbbWF4XTsKIAppbnQgbWFpbigpCnsKICAgIGludCBuLGVkZ2VzLGksYzsKICAgIGNpbj4+bj4+ZWRnZXM7CiAgICBmb3IoaT0wO2k8PW47aSsrKQogICAgIHsKICAgICAgICAgdmlzaXRbaV09MDsKICAgICAgICAgcmV2Y250W2ldPW1heDsKICAgICAgICAgdltpXS5jbGVhcigpOwogICAgIH0KICAgICBpbnQgeCx5OwogICAgIAogICAgIHdoaWxlKGVkZ2VzLS0pCiAgICAgewogICAgICAgICBjaW4+Png+Pnk7CiAgICAgICAgIHNbeF0uaW5zZXJ0KHkpOwogICAgICAgICB2W3hdLnB1c2hfYmFjayh5KTsKICAgICAgICAgdlt5XS5wdXNoX2JhY2soeCk7CiAgICAgfQogICAgIAogICAgIHByaW9yaXR5X3F1ZXVlPHBhaXI8aW50LGludD4sdmVjdG9yPHBhaXI8aW50LGludD4gPixncmVhdGVyPHBhaXI8aW50LGludD4gPiA+IFE7CiAgICAgCiAgICAgUS5wdXNoKG1ha2VfcGFpcigwLDEpKTsKICAgICB2aXNpdFsxXT0wOwogICAgIHJldmNudFsxXT0wOwogICAgIAogICAgIHdoaWxlKCFRLmVtcHR5KCkpCiAgICAgewogICAgICAgICBwYWlyPGludCxpbnQ+IHA9US50b3AoKTsKICAgICAgICAgUS5wb3AoKTsKICAgICAgICAgaWYoIXZpc2l0W3Auc2Vjb25kXSkKICAgICAgICAgewogICAgICAgICAgICAgdmlzaXRbcC5zZWNvbmRdPTE7CiAgICAgICAgICAgICBpZihwLnNlY29uZD09bikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb3V0PDxwLmZpcnN0PDxlbmRsOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8KGludCl2W3Auc2Vjb25kXS5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCBrZXk9dltwLnNlY29uZF1baV07CiAgICAgICAgICAgICAgICAgICAgIGlmKCF2aXNpdFtrZXldKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZihzW3Auc2Vjb25kXS5maW5kKGtleSkhPXNbcC5zZWNvbmRdLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9cC5maXJzdCswOyAvLyBpLmUuIGFuIGVkZ2UgYWxyZWFkeSBleGlzdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPHJldmNudFtrZXldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmNudFtrZXldPWM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz1wLmZpcnN0KzE7IC8vIGkuZS4gd2UgbmVlZCB0byByZXZlcnNlIGFuIGVkZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjPHJldmNudFtrZXldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmNudFtrZXldPWM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBRLnB1c2gobWFrZV9wYWlyKHJldmNudFtrZXldLGtleSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmKHJldmNudFtuXT09bWF4KQogICAgIGNvdXQ8PCItMSI8PGVuZGw7CiAgICAgLy9lbHNlCiAgICAgLy9jb3V0PDxyZXZjbnRbbl08PGVuZGw7CiAgICByZXR1cm4gMDsKfQog