#include <iostream>
#include<vector>
#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];
map<pair<int,int>, int> m;
map<pair<int,int>, int>:: iterator it;
void dijkstra(int n)
{
int i,source=1,cnt=0,key,c;
revcnt[source]=0;
m.insert(make_pair(make_pair(revcnt[source],cnt),source));
visit[source]=1;
cnt++;
while(m.begin()!=m.end())
{
it=m.begin();
source=it->second;
visit[source]=1;
if(source==n)
{
// f=1;
break;
}
m.erase(it);
for(i=0;i<(int)v[source].size();i++)
{
key=v[source][i];
if(!visit[key])
{
//cout<<" key is "<<key<<" ";
if(s[source].find(key)!=s[source].end())
{
// source->v[source][i] is an edge in the graph
c=revcnt[source];
if(c<revcnt[key])
revcnt[key]=c;
}
else
{
c=revcnt[source]+1;
//cout<<"c is "<<c<<endl;
if(c<revcnt[key])
revcnt[key]=c;
}
//cout<<" for k as "<<key<<" "<<revcnt[key]<<endl;
m.insert(make_pair(make_pair(revcnt[key],cnt),key));
cnt++;
//visit[key]=1;
}
}
}
}
int main()
{
int n,edges,i;
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);
}
dijkstra(n);
if(!visit[n])
cout<<"-1"<<endl;
else
cout<<revcnt[n]<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPHNldD4KI2luY2x1ZGU8bWFwPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBtYXggMTAwMDAxCiAKbWFwPGludCxib29sPnZpc2l0OwptYXA8aW50LGludD4gcmV2Y250Owp2ZWN0b3I8aW50PiB2W21heF07CnNldDxpbnQ+IHNbbWF4XTsKbWFwPHBhaXI8aW50LGludD4sIGludD4gbTsKbWFwPHBhaXI8aW50LGludD4sIGludD46OiBpdGVyYXRvciBpdDsKIAp2b2lkIGRpamtzdHJhKGludCBuKQp7CiAgICBpbnQgaSxzb3VyY2U9MSxjbnQ9MCxrZXksYzsKICAgIHJldmNudFtzb3VyY2VdPTA7CiAgICBtLmluc2VydChtYWtlX3BhaXIobWFrZV9wYWlyKHJldmNudFtzb3VyY2VdLGNudCksc291cmNlKSk7CiAgICB2aXNpdFtzb3VyY2VdPTE7CiAgICBjbnQrKzsKICAgIAogICAgd2hpbGUobS5iZWdpbigpIT1tLmVuZCgpKQogICAgewogICAgICAgIGl0PW0uYmVnaW4oKTsKICAgICAgICBzb3VyY2U9aXQtPnNlY29uZDsKICAgICAgICB2aXNpdFtzb3VyY2VdPTE7CiAgICAgICAgaWYoc291cmNlPT1uKQogICAgICAgIHsKICAgICAgICAvLwlmPTE7CiAgICAgICAgCWJyZWFrOwogICAgICAgIH0KICAgICAgICBtLmVyYXNlKGl0KTsKICAgICAgICBmb3IoaT0wO2k8KGludCl2W3NvdXJjZV0uc2l6ZSgpO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGtleT12W3NvdXJjZV1baV07CiAgICAgICAgICAgIGlmKCF2aXNpdFtrZXldKQogICAgICAgICAgICB7CiAgICAgICAgICAgIAkvL2NvdXQ8PCIga2V5IGlzICI8PGtleTw8IiAiOwogICAgICAgICAgICAgICAgaWYoc1tzb3VyY2VdLmZpbmQoa2V5KSE9c1tzb3VyY2VdLmVuZCgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZS0+dltzb3VyY2VdW2ldIGlzIGFuIGVkZ2UgaW4gdGhlIGdyYXBoCiAgICAgICAgICAgICAgICAgICAgYz1yZXZjbnRbc291cmNlXTsKICAgICAgICAgICAgICAgICAgICBpZihjPHJldmNudFtrZXldKQogICAgICAgICAgICAgICAgICAgIHJldmNudFtrZXldPWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgYz1yZXZjbnRbc291cmNlXSsxOwogICAgICAgICAgICAgICAgICAgIC8vY291dDw8ImMgaXMgIjw8Yzw8ZW5kbDsKICAgICAgICAgICAgICAgICAgICBpZihjPHJldmNudFtrZXldKQogICAgICAgICAgICAgICAgICAgIHJldmNudFtrZXldPWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvL2NvdXQ8PCIgZm9yIGsgYXMgIjw8a2V5PDwiICI8PHJldmNudFtrZXldPDxlbmRsOwogICAgICAgICAgICAgICAgbS5pbnNlcnQobWFrZV9wYWlyKG1ha2VfcGFpcihyZXZjbnRba2V5XSxjbnQpLGtleSkpOwogICAgICAgICAgICAgICAgY250Kys7CiAgICAgICAgICAgICAgICAvL3Zpc2l0W2tleV09MTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAKICAgIH0KfQogCmludCBtYWluKCkKewogICAgaW50IG4sZWRnZXMsaTsKICAgIGNpbj4+bj4+ZWRnZXM7CiAgICBmb3IoaT0wO2k8PW47aSsrKQogICAgIHsKICAgICAgICAgdmlzaXRbaV09MDsKICAgICAgICAgcmV2Y250W2ldPW1heDsKICAgICAgICAgdltpXS5jbGVhcigpOwogICAgIH0KICAgICBpbnQgeCx5OwogICAgIAogICAgIHdoaWxlKGVkZ2VzLS0pCiAgICAgewogICAgICAgICBjaW4+Png+Pnk7CiAgICAgICAgIHNbeF0uaW5zZXJ0KHkpOwogICAgICAgICB2W3hdLnB1c2hfYmFjayh5KTsKICAgICAgICAgdlt5XS5wdXNoX2JhY2soeCk7CiAgICAgICAgIAogICAgIH0KICAgICAKICAgICBkaWprc3RyYShuKTsKICAgICAKICAgICBpZighdmlzaXRbbl0pCiAgICAgY291dDw8Ii0xIjw8ZW5kbDsKICAgICBlbHNlCiAgICAgY291dDw8cmV2Y250W25dPDxlbmRsOwogICAgcmV0dXJuIDA7Cn0KIA==