import java.util.*;
import java.io.*;
class ArticulationPoints
{
static ArrayList<ArrayList<Integer>> map = new ArrayList<ArrayList<Integer>>();
static int parent[]=new int[10100];
static int visited[]=new int[10100];
static int disc[]=new int[10100];
static int low[]=new int[10100];
static int ap[]=new int[10100];
static int time=0;
{
StringBuilder op = new StringBuilder();
for(int i=0;i<=10100;i++)
map.add(new ArrayList<Integer>());
while(true)
{
inLine = input.readLine().split(" ");
int N
= Integer.
parseInt(inLine
[0]); int M
= Integer.
parseInt(inLine
[1]); if(N==0&&M==0)break;
//Reset Everything!
for(int i=0;i<=N;i++)
{ map.get(i).clear();parent[i]=-1;visited[i]=-1;ap[i]=-1;disc[i]=0;low[i]=0;}
for(int i=0;i<M;i++)
{
inLine = input.readLine().split(" ");
int u
= Integer.
parseInt(inLine
[0]); int v
= Integer.
parseInt(inLine
[1]); map.get(u).add(v);
map.get(v).add(u);
}
time=0;
dfs(1,true);
int ans=0;
for(int i=1;i<=N;i++)
if(ap[i]==1)ans++;
op.append(ans).append("\n");
}
}
static void dfs (int u , boolean isRoot)
{
int child=0;
visited[u]=1;
disc[u]=++time;
low[u]=disc[u];
int sz = map.get(u).size();
for(int i=0;i<sz;i++)
{
int v = map.get(u).get(i);
if(visited[v]!=1)
{
child++;
parent[v]=u;
dfs(v,false);
// Check if the subtree rooted with v has a connection to one of the ancestors of u
low
[u
] = Math.
min(low
[u
],low
[v
]); // u is an articulation point in following cases
// (1) u is root of DFS tree and has two or more chilren.
if (isRoot&& child>=2)
ap[u]=1;
// (2) If u is not root and low value of one of its child is more
// than discovery value of u.
if ( !isRoot && low[v] >= disc[u])
ap[u]=1;
}
else if (v != parent[u])
low
[u
] = Math.
min(low
[u
], disc
[v
]); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwpjbGFzcyBBcnRpY3VsYXRpb25Qb2ludHMKeyAKICAgIHN0YXRpYyBBcnJheUxpc3Q8QXJyYXlMaXN0PEludGVnZXI+PiBtYXAgPSBuZXcgQXJyYXlMaXN0PEFycmF5TGlzdDxJbnRlZ2VyPj4oKTsKICAgIHN0YXRpYyBpbnQgcGFyZW50W109bmV3IGludFsxMDEwMF07CiAgICBzdGF0aWMgaW50IHZpc2l0ZWRbXT1uZXcgaW50WzEwMTAwXTsKICAgIHN0YXRpYyBpbnQgZGlzY1tdPW5ldyBpbnRbMTAxMDBdOwogICAgc3RhdGljIGludCBsb3dbXT1uZXcgaW50WzEwMTAwXTsKICAgIHN0YXRpYyBpbnQgYXBbXT1uZXcgaW50WzEwMTAwXTsKICAgIHN0YXRpYyBpbnQgdGltZT0wOwogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW11hcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24KICAgIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAgICAgU3RyaW5nIGluTGluZVtdOwogICAgICAgIFN0cmluZ0J1aWxkZXIgb3AgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgIGZvcihpbnQgaT0wO2k8PTEwMTAwO2krKykKICAgICAgICAgICAgbWFwLmFkZChuZXcgQXJyYXlMaXN0PEludGVnZXI+KCkpOwogICAgICAgIHdoaWxlKHRydWUpCiAgICAgICAgewogICAgICAgICAgICBpbkxpbmUgPSBpbnB1dC5yZWFkTGluZSgpLnNwbGl0KCIgIik7CiAgICAgICAgICAgIGludCBOID0gSW50ZWdlci5wYXJzZUludChpbkxpbmVbMF0pOwogICAgICAgICAgICBpbnQgTSA9IEludGVnZXIucGFyc2VJbnQoaW5MaW5lWzFdKTsKICAgICAgICAgICAgaWYoTj09MCYmTT09MClicmVhazsKICAgICAgICAgICAgLy9SZXNldCBFdmVyeXRoaW5nIQogICAgICAgICAgICBmb3IoaW50IGk9MDtpPD1OO2krKykKICAgICAgICAgICAgeyBtYXAuZ2V0KGkpLmNsZWFyKCk7cGFyZW50W2ldPS0xO3Zpc2l0ZWRbaV09LTE7YXBbaV09LTE7ZGlzY1tpXT0wO2xvd1tpXT0wO30KICAgICAgICAgICAgZm9yKGludCBpPTA7aTxNO2krKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW5MaW5lID0gaW5wdXQucmVhZExpbmUoKS5zcGxpdCgiICIpOwogICAgICAgICAgICAgICAgaW50IHUgPSBJbnRlZ2VyLnBhcnNlSW50KGluTGluZVswXSk7CiAgICAgICAgICAgICAgICBpbnQgdiA9IEludGVnZXIucGFyc2VJbnQoaW5MaW5lWzFdKTsKICAgICAgICAgICAgICAgIG1hcC5nZXQodSkuYWRkKHYpOwogICAgICAgICAgICAgICAgbWFwLmdldCh2KS5hZGQodSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGltZT0wOwogICAgICAgICAgICBkZnMoMSx0cnVlKTsKICAgICAgICAgICAgaW50IGFucz0wOwogICAgICAgICAgICBmb3IoaW50IGk9MTtpPD1OO2krKykKICAgICAgICAgICAgaWYoYXBbaV09PTEpYW5zKys7CiAgICAgICAgICAgIG9wLmFwcGVuZChhbnMpLmFwcGVuZCgiXG4iKTsKICAgICAgICB9CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG9wKTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBkZnMgKGludCB1ICwgYm9vbGVhbiBpc1Jvb3QpCiAgICB7CiAgICAgICAgaW50IGNoaWxkPTA7CiAgICAgICAgdmlzaXRlZFt1XT0xOwogICAgICAgIGRpc2NbdV09Kyt0aW1lOwogICAgICAgIGxvd1t1XT1kaXNjW3VdOwogICAgICAgIGludCBzeiA9IG1hcC5nZXQodSkuc2l6ZSgpOwogICAgICAgIGZvcihpbnQgaT0wO2k8c3o7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHYgPSBtYXAuZ2V0KHUpLmdldChpKTsKICAgICAgICAgICAgaWYodmlzaXRlZFt2XSE9MSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2hpbGQrKzsKICAgICAgICAgICAgICAgIHBhcmVudFt2XT11OwogICAgICAgICAgICAgICAgZGZzKHYsZmFsc2UpOwogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN1YnRyZWUgcm9vdGVkIHdpdGggdiBoYXMgYSBjb25uZWN0aW9uIHRvIG9uZSBvZiB0aGUgYW5jZXN0b3JzIG9mIHUKICAgICAgICAgICAgICAgIGxvd1t1XSAgPSBNYXRoLm1pbihsb3dbdV0sbG93W3ZdKTsKICAgICAgICAgICAgICAgIC8vIHUgaXMgYW4gYXJ0aWN1bGF0aW9uIHBvaW50IGluIGZvbGxvd2luZyBjYXNlcwogICAgICAgICAgICAgICAgLy8gKDEpIHUgaXMgcm9vdCBvZiBERlMgdHJlZSBhbmQgaGFzIHR3byBvciBtb3JlIGNoaWxyZW4uCiAgICAgICAgICAgICAgICBpZiAoaXNSb290JiYgY2hpbGQ+PTIpCiAgICAgICAgICAgICAgICAgICAgYXBbdV09MTsKICAgICAgICAgICAgICAgIC8vICgyKSBJZiB1IGlzIG5vdCByb290IGFuZCBsb3cgdmFsdWUgb2Ygb25lIG9mIGl0cyBjaGlsZCBpcyBtb3JlCiAgICAgICAgICAgICAgICAvLyB0aGFuIGRpc2NvdmVyeSB2YWx1ZSBvZiB1LgogICAgICAgICAgICAgICAgaWYgKCAhaXNSb290ICYmIGxvd1t2XSA+PSBkaXNjW3VdKQogICAgICAgICAgICAgICAgICAgIGFwW3VdPTE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodiAhPSBwYXJlbnRbdV0pCiAgICAgICAgICAgICAgICBsb3dbdV0gID0gTWF0aC5taW4obG93W3VdLCBkaXNjW3ZdKTsKICAgICAgICB9CiAgICB9Cn0=