Problem:
Score : 500 points

Problem Statement

Rng has a connected undirected graph with N vertices.
Currently, there are M edges in the graph, and the i-th edge connects Vertices A_i and B_i.

Rng will add new edges to the graph by repeating the following operation:

Operation: Choose u and v (u \neq v) such that Vertex v can be reached by traversing exactly three edges from Vertex u, and add an edge connecting Vertices u and v. It is not allowed to add an edge if there is already an edge connecting Vertices u and v.

Find the maximum possible number of edges that can be added.

Constraints

2 \leq N \leq 10^5

1 \leq M \leq 10^5

1 \leq A_i,B_i \leq N

The graph has no self-loops or multiple edges.

The graph is connected.

Input

Input is given from Standard Input in the following format:

N M
A_1 B_1
A_2 B_2
:
A_M B_M

Output

Find the maximum possible number of edges that can be added.

Sample Input 1

6 5
1 2
2 3
3 4
4 5
5 6

Sample Output 1

4

If we add edges as shown below, four edges can be added, and no more.

Sample Input 2

5 5
1 2
2 3
3 1
5 4
5 1

Sample Output 2

5

Five edges can be added, for example, as follows:

Add an edge connecting Vertex 5 and Vertex 3.

Add an edge connecting Vertex 5 and Vertex 2.

Add an edge connecting Vertex 4 and Vertex 1.

Add an edge connecting Vertex 4 and Vertex 2.

Add an edge connecting Vertex 4 and Vertex 3.

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <queue>
#include <set>
#include <stdio.h>
#include <climits>
#include <map>
#include <time.h>
#include <random>
//#include "rubo.h"

#define dbl long double
#define pb push_back
#define mp make_pair
#define SQ(x) (x)*(x)
#define ll long long
#define ull unsigned long long
#define vc vector
#define X first
#define Y second
//#define in ll
#define pll pair<ll,ll>
#define pii pair<int,int>
#define all(x) x.begin(), x.end()
#define loop(xxx, yyy) for(int xxx = 0; xxx < yyy; xxx++)
//#define printf(fmt...) (0)
//#define puts(fmt...) (0)

//#include "rubo.h"

using namespace std;

const int N = 222222;

int n, m;
vc<int> g[N];

vc<char> used(N, false);
vc<int> color(N, -1);

void dfs(int v, int c) {
	used[v] = true;
	color[v] = c;

	for (int to : g[v]) {
		if (!used[to]) {
			dfs(to, 1 - c);
		}
	}
}

int main() {
	scanf("%d%d", &n,&m);
	loop(i, m) {
		int u, v;
		scanf("%d%d", &u, &v);
		u--, v--;
		g[u].push_back(v);
		g[v].push_back(u);
	}

	dfs(0, 0);

	bool bipartite = true;
	loop(v, n) 
		for (int u : g[v]) 
			if (color[v] == color[u])
				bipartite = false;
	
	ll ans;


	if (bipartite) {
		ll c0 = count(all(color), 0);
		ll c1 = count(all(color), 1);
		ans = c0*c1 - m;
	}
	else {
		ans = (n*(n - 1ll)) / 2 - m;
	}

	printf("%lld\n", ans);

	return 0;
}