/*
TASK:TRI
LANG:C++
*/ 
#include<iostream>
using namespace std;
int a[2001][2001],n,m,used[2001],pred[2001],s=6001;
void DFS(int i){
     int j;
     used[i]=1;
     for(j=1;j<=n;j++){
                       if(a[i][j])
                       if(used[j]&&pred[i]!=j&&a[pred[i]][j]){s=min(s,(i+j+pred[i]));}
                       else if(used[j]==0){pred[j]=i;DFS(j);}
                       }
}
int main(){
int i,j,k;
cin>>n>>m;
for(i=1;i<=m;i++)
{
                 cin>>j>>k;
                 a[k][j]=1;
                 a[j][k]=1;
}
    for(i=1;i<=n;i++){
                      if(used[i]==0) DFS(i);
                      }
    if(s<6001)cout<<s<<endl;
    else cout<<0<<endl;
    return 0;
}
