#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n,m;
int maxn = 0,minn = 0;
vector<int> ve[N];
bool vis[N];
int color[N];
void bfs(int id, int& cnt0, int& cnt1){
queue<int> q;
q.push(id);
vis[id] = true;
color[id] = 0;
cnt0 = 1,cnt1 = 0;
while(!q.empty()){ //遍历这个联通块的所有结点
int u = q.front();
q.pop();
for( auto v : ve[u]) {
if(!vis[v]){
vis[v] = true;
color[v] = (color[u] == 1) ? 0 : 1; //反向染色,用^1也可以
cnt0 += (color[v] == 0) ? 1 : 0; //变量增减
cnt1 += (color[v] == 1) ? 1 : 0; //变量增减
q.push(v);
}
}
}
}
void init() { //其实没有什么用
memset(vis, false, sizeof vis);
}
void read() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int u,v;
cin >> u >> v;
ve[u].push_back(v),ve[v].push_back(u);
}
}
void process() {
init();
for(int i = 1; i <= n; i++){
if(!vis[i]){
int cnt0 = 0,cnt1 = 0;
bfs(i, cnt0, cnt1);
minn += min(cnt0, cnt1); //最少的人数变量增加
maxn += max(cnt0, cnt1); //最多的人数变量增加
}
}
}
void write() {
cout << minn << " " << maxn;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
}