#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
ifstream f("dfs.in");
ofstream d("dfs.out");
int search_unmarked(vector<int> b,int n);
void mark(int **a,vector<int> &b,int n,int x,int y);
int main()
{
int n,m,i,x,y;
f>>n;
f>>m;
vector<int> b(n,0);
int **a;
a = new int*[n];
for(i=0;i<n;i++)
a[i] = new int[n];
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;
for(i=1;i<=m;i++)
{
f>>x;
f>>y;
a[x][y]=1;
a[y][x]=1;
}
srand (time(NULL));
x=rand() % n;
i=1;
mark(a,b,n,x,i);
while(search_unmarked(b,n) != -1)
{
x=search_unmarked(b,n);
i++;
mark(a,b,n,x,i);
}
int comp_conex=0;
for(i=0;i<n;i++)
if(b[i]>comp_conex)
comp_conex=b[i];
d<<comp_conex;
return 0;
}
int search_unmarked(vector<int> b,int n)
{
for(int i=0;i<=n;i++)
if(b[i]==0)
return i;
return -1;
}
/*void mark(int **a,vector<int> b,int n,int x,int y)
{
b[x]=y;
for(int i=0;i<n;i++)
if(a[x][i]==1 && b[i]!=y)
{
b[i]=y;
mark(a,b,n,i,y);
}
}*/
void mark(int **a, vector<int> &b, int n,int i, int y)
{
int j;
printf("\n%d",i);
b[i]=y;
for(j=0;j<n;j++)
if(!b[j] && a[i][j]==1)
mark(a,b,n,j,y);
}