#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int fa[maxn];
int id[maxn];
int flag[maxn];
int n, m;
void init()
{
for(int i = 0; i < n; ++i) ///注意结点标号从几开始
fa[i] = -1;
}
int Find(int x)
{
int s;
for(s = x; fa[s] >= 0; s = fa[s]);
while(s != x)
{
int tmp = fa[x];
fa[x] = s;
x = tmp;
}
return s;
}
void Union(int x, int y)
{
int tmp;
int xx = Find(x);
int yy = Find(y);
if(xx == yy) return ;
tmp = fa[xx] + fa[yy];
if(fa[xx] > fa[yy]) ///因为结点数是负的
{
fa[xx] = yy;
fa[yy] = tmp;
}
else
{
fa[yy] = xx;
fa[xx] = tmp;
}
}
int main()
{
while(scanf("%d%d", &n, &m), n || m)
{
init();
int u, v;
for(int i = 0; i < n; ++i)
{
id[i] = 0;
flag[i] = 0;
}
///int size_ = n*4;
///memset(id, 0, size_);
///memset(flag, 0, size_);
for(int i = 0; i < m; ++i)
{
scanf("%d%d", &u, &v);
id[u]++;
id[v]++;
Union(u, v);
}
for(int i = 0; i < n; ++i)
{
if(id[i] != 2) ///度数不为2则说明不是形成题目要求的环
{
flag[Find(i)] = 1;
}
}
int s1 = 0, s2 = 0;
for(int i = 0; i < n; ++i)
{
if(fa[i] < 0)
{
s1++;
if(!flag[i])
s2++;
}
}
printf("%d %d\n", s1, s2);
}
return 0;
}