Problem:
Score : 400 points

Problem Statement

There are N persons called Person 1 through Person N.

You are given M facts that "Person A_i and Person B_i are friends." The same fact may be given multiple times.

If X and Y are friends, and Y and Z are friends, then X and Z are also friends. There is no friendship that cannot be derived from the M given facts.

Takahashi the evil wants to divide the N persons into some number of groups so that every person has no friend in his/her group.

At least how many groups does he need to make?

Constraints

2 \leq N \leq 2\times 10^5

0 \leq M \leq 2\times 10^5

1\leq A_i,B_i\leq N

A_i \neq B_i

Input

Input is given from Standard Input in the following format:

N M
A_1 B_1
\vdots
A_M B_M

Output

Print the answer.

Sample Input 1

5 3
1 2
3 4
5 1

Sample Output 1

3

Dividing them into three groups such as \{1,3\}, \{2,4\}, and \{5\} achieves the goal.

Sample Input 2

4 10
1 2
2 1
1 2
2 1
1 2
1 3
1 4
2 3
2 4
3 4

Sample Output 2

4

Sample Input 3

10 4
3 1
4 1
5 9
2 6

Sample Output 3

3

Solution in C++ (GCC 9.2.1) (judge verdict: Time Limit Exceeded)

#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;

int bfs(int s,vector<vector<int>> &adj,vector<int> visited){

	queue<int> q ;
	q.push(s) ;

	visited[s]=1 ;

	int size=1 ;

	while(!q.empty()){

		int t=q.front() ;
		q.pop() ;

		for(auto x:adj[t]){
			if(visited[x]==0)
			{
				q.push(x) ;
				visited[x]=1 ;
				size++ ;
			}
		}

	}

	return size ;

}


void solve(){
	
	int n,m ;
	cin>>n>>m ;

	vector<vector<int>> adj(n+1) ;
	
	
	for(int i=0;i<m;i++){
		int l,r ;
		cin>>l>>r;
		//cout<<l<<r ;
			
		adj[l].push_back(r) ;
		adj[r].push_back(l) ;
	
	}

	vector<int> visited(n+1) ;

	int res=0 ;

	for(int i=1;i<=n;i++){

		if(visited[i]==0)
		{
			int answer=bfs(i,adj,visited) ;
			res=max(res,answer) ;		
		}
	
	}		

	cout<<res ;

}
int main(){


	int y ;

	y=1 ;
	//cin>>y ;

	while(y--)
	{	
		solve() ;
	}

}