#include<iostream>
#include<cstring>
#include<vector>
#include<stack>
#include<cstdio>
#define maxm 2000005
#define maxn 1005
using namespace std;
int n,m;
struct Eric_cai
{
int to,next;
};
Eric_cai EC[maxm];
int head[maxn],cnt;
void add(int u,int v)
{
EC[++cnt].to=v;
EC[cnt].next=head[u];
head[u]=cnt;
}
bool vis[maxn][maxn];
int dfn[maxn],low[maxn],times,ans;
struct node
{
int u,v;
node(int uu,int vv)
{
u=uu,v=vv;
}
};
int num;
stack<node> s;
vector<int> vec[maxn];
int no[maxn];
void Tarjan(int now,int fa)
{
dfn[now]=low[now]=++times;
for(int i=head[now];i!=0;i=EC[i].next)
{
if(dfn[EC[i].to]==0)
{
Tarjan(EC[i].to,now);
low[now]=min(low[now],low[EC[i].to]);
if(low[EC[i].to]<dfn[now])
{
vec[++num].clear();
s.push(node(now,EC[i].to));
while(!s.empty())
{
node tp=s.top();
if(no[tp.u]!=num) vec[num].push_back(tp.u);
if(no[tp.v]!=num) vec[num].push_back(tp.v);
no[tp.u]=num;
no[tp.v]=num;
if(tp.u==now && tp.v==EC[i].to) break;
}
s.pop();
}
}
else if(EC[i].to!=fa && dfn[EC[i].to]<dfn[now])
{
low[now]=min(low[now],dfn[EC[i].to]);
s.push(node(now,EC[i].to));
}
}
}
int col[maxn];
bool check(int number,int now,int Col)
{
col[now]=Col;
for(int i=head[now];i!=0;i=EC[i].next)
{
if(no[EC[i].to]!=number) continue;
if(col[EC[i].to]==Col) return 0;
if(col[EC[i].to]==0)
if(check(number,EC[i].to,3-Col)==0) return 0;
}
return 1;
}
bool flag[maxn];
void init()
{
memset(flag,0,sizeof(flag));
memset(col,0,sizeof(col));
memset(no,0,sizeof(no));
while(!s.empty()) s.pop();
num=times=cnt=ans=0;
memset(vis,0,sizeof(vis));
memset(head,0,sizeof(head));
memset(low,0,sizeof(low));
memset(dfn,0,sizeof(dfn));
}
int main()
{
int u,v;
while(1)
{
init();
scanf("%d%d",&n,&m);
if(n==0 && m==0) break;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
vis[u][v]=vis[v][u]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j && vis[i][j]==0) add(i,j);
for(int i=1;i<=n;i++)
{
times=0;
if(dfn[i]==0) Tarjan(i,0);
}
for(int i=1;i<=num;i++)
if(check(i,vec[i][0],1)==0 || vec[i].size()<3)
for(int j=0;j<vec[i].size();j++) flag[vec[i][j]]=1;
for(int i=1;i<=n;i++) if(flag[i]==1) ans++;
printf("%d\n",ans);
}
return 0;
}