#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int >q[110];
int g[110][110],n,m,a,b,ans=0x3f3f3f3f;
bool check(int now,int i){
for(int j=0;j<q[i].size();j++)
if(g[now][q[i][j]])return false;
return true;
}
void dfs(int now,int cnt){
if(cnt>=ans)return;
if(now==n+1){ans=min(ans,cnt);return;}
for(int i=1;i<=cnt;i++)
if(check(now,i))
q[i].push_back(now),dfs(now+1,cnt),q[i].pop_back();
if(cnt+1<=n)
q[cnt+1].push_back(now),dfs(now+1,cnt+1),q[cnt+1].pop_back();
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
while(m--)
cin>>a>>b,
g[a][b]=g[b][a]=1;
dfs(1,1);
cout<<ans;
return 0;
}