/*
TASK:tri
LANG:C++
*/
#include<iostream>
#include<vector>
using namespace std;

vector<int> a[2048];
int mat[2048][2048];
int vis[2048];
int prev[1024];
int mintr;

int mch(int a, int b, int c)
{
	if(a+b+c<mintr)mintr=a+b+c;
}
int dfs(int i)
{
	vis[i]=0;
	for(int j=0; j<a[i].size(); j++)
	{
		if(prev[prev[i]]!=0 && prev[prev[i]]==a[i][j])
			mch(prev[i], prev[prev[i]], i);
		if(mat[ prev[i] ][ a[i][j] ])
			mch(prev[i], i, a[i][j]);
		if(!vis[ a[i][j] ]) { prev[a[i][j]]=i; dfs(a[i][j]); }
	}
}

int main()
{
	int n, m;
	mintr=2000000000;
	scanf("%d%d", &n, &m);
	int i, j, k;
	int p, q;
	for(i=1; i<=m; i++)
	{
		scanf("%d%d", &p, &q);
		mat[p][q]=1;
		mat[q][p]=1;
		a[p].push_back(q);
		a[q].push_back(p);
	}
	for(i=1; i<=n; i++) if(!vis[i]) dfs(i);
	if(mintr==2000000000) printf("0\n");
	else printf("%d\n", mintr);
	return 0;
}
