100 10
87 73
15 71
14 33
1 4
20 80
65 67
36 36
25 4
22 21
7 97
 4 2
3 3
3 4
 5 4
3 3
4 4
5 5
1 2
 4 4
1 2
2 3
3 1
4 4
 4 3
1 1
2 3
3 4
 1000000 1
255765 255765
 4 3
1 2
2 3
4 4
 4 2
1 1
1 2
 3 3
1 1
2 2
3 3
 5 4
1 1
2 3
2 4
2 5
 4 5
1 4
3 4
1 2
2 3
2 4
 4 4
2 3
2 4
3 4
4 4
 10 9
8 10
3 10
2 8
9 3
4 8
1 10
7 9
5 4
7 3
 10 10
1 2
2 3
3 4
4 5
5 1
6 6
7 7
8 8
9 9
10 10
 5 5
1 4
3 4
1 2
2 3
2 4
 3 3
1 2
2 2
3 3
 5 3
1 1
2 2
3 3
 6 12
1 2
1 3
2 3
1 1
2 2
3 3
4 5
5 6
4 6
4 4
5 5
6 6
 4 4
1 2
2 3
1 3
4 4
 5 4
1 2
3 3
4 4
5 5
 7 13
6 7
2 7
3 7
4 3
5 2
1 4
7 7
3 1
5 5
3 3
1 5
2 6
6 6
 2 2
1 1
2 2
 5 5
1 1
2 2
3 3
4 4
5 5
 1 1
1 1
 7 3
1 1
3 3
6 6
 3 3
1 1
2 3
3 3

0 1 0 0 0 0 0 1 0 0 8 6 12 0 8 0 0 0 0 0 57 0 0 0 0 0
import com.sun.javafx.geom.Edge;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.*;

public class Main {

	static ArrayList<Edge>[] adjList;

	public static void main(String[] args) throws IOException {

		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);

		int n = sc.nextInt(), m = sc.nextInt();

		int[] x = new int[m], y = new int[m], deg = new int[n];
		int loops = 0;

		DSU dsu = new DSU(n);
		for(int i = 0; i < m; ++i)
		{
			int u = x[i] = sc.nextInt() - 1, v = y[i] = sc.nextInt() - 1;
			if(u != v)
			{
				++deg[u];
				++deg[v];
			}
			else
				++loops;
			dsu.union(u, v);
		}

		long ans = 0;
		for(int i = 0; i < m; ++i)
			if(x[i] != y[i])
				ans += deg[x[i]] + deg[y[i]] - 2;

		ans = ans / 2 + 1l * loops * (loops - 1) / 2 + 1l * loops * (m - loops);
		out.println(dsu.good() ? ans : 0);

		out.close();
	}

	static class DSU
	{
		int[] r, p, e;

		DSU(int N)
		{
			r = new int[N];
			p = new int[N];
			e = new int[N];
			for(int i = 0; i < N; ++i)
				p[i] = i;
		}

		int find(int x) { return p[x] == x ? x : (p[x] = find(p[x])); }

		void union(int x, int y)
		{
			x = find(x);
			y = find(y);

			if(x == y)
			{
				e[x]++;
				return;
			}
			if(r[x] > r[y])
				p[y] = x;
			else
			{
				p[x] = y;
				if(r[x] == r[y])
					++r[y];
			}
			e[p[x]]++;
		}

		boolean good()
		{
			int cnt = 0;
			for(int x: e)
				if(x != 0)
					++cnt;
			return cnt == 1;
		}
	}


	static class Scanner
	{
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream s){	br = new BufferedReader(new InputStreamReader(s));}

		public Scanner(String s) throws FileNotFoundException{	br = new BufferedReader(new FileReader(s));}

		public String next() throws IOException
		{
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public int nextInt() throws IOException {return Integer.parseInt(next());}

		public long nextLong() throws IOException {return Long.parseLong(next());}

		public String nextLine() throws IOException {return br.readLine();}

		public double nextDouble() throws IOException { return Double.parseDouble(next()); }

		public boolean ready() throws IOException {return br.ready();}
	}
}