#include<bits/stdc++.h>
using namespace std;
const int MAXN=305;
vector<int>G[MAXN];
vector<int>point[MAXN];
int dep[MAXN];
bool vis[MAXN];
int ans=MAXN,sum;
void dfs(int x,int father)
{
dep[x]=dep[father]+1;
for(auto y:G[x]) if(y!=father) dfs(y,x);
}
void solve(int x,int father)
{
if(sum>=ans) return;
++sum;
for(auto y:G[x]) if(!vis[y] && y!=father) solve(y,x);
}
void cut(int x)
{
if(point[x].empty())
{
sum=0,solve(1,0),ans=min(ans,sum);
return;
}
for(auto i:point[x]) vis[i]=1,cut(x+1),vis[i]=0;
}
int main()
{
int n,m;
cin>>n>>m;
int u,v;
for(int i=1;i<=m;++i)
{
scanf("%d %d",&u,&v);
G[u].push_back(v),G[v].push_back(u);
}
dfs(1,0);
for(int i=1;i<=n;++i) point[dep[i]].push_back(i);
cut(2);
cout<<ans;
return 0;
}