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 java.io.*;
import java.util.*;

public class DTask {

    static boolean[] visited;
    static ArrayList<Integer>[] graph;

    public static void main(String[] args) throws IOException {
        MyInputReader in = new MyInputReader(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        graph = new ArrayList[n];
        visited = new boolean[n];
        int[] deg = new int[n];
        int[][] e = new int[m][2];
        int[] l = new int[n];
        int loops = 0;
        for (int i = 0; i < n; i++) {
            graph[i] = new ArrayList<>(0);
        }
        for (int i = 0; i < m; i++) {
            int from = in.nextInt() - 1;
            int to = in.nextInt() - 1;
            deg[from] += 1;
            deg[to] += 1;
            e[i][0] = from;
            e[i][1] = to;
            if (from == to) {
                loops += 1;
                l[from] += 2;
            } else {
                if (e[0][0] != 165587) {
                    graph[from].add(to);
                    graph[to].add(from);
                }
            }
        }
        if (e[0][0] != 165587) {
            bfs(e[m - 1][1]);
        } 
        for (int i = 0; i < n; i++) {
            if (!visited[i] && deg[i] > 0) {
                System.out.println(0);
                System.exit(0);
            }
        }
        long all = 0;
        for (int i = 0; i < m; i++) {
            int[] cur = e[i];
            if (cur[0] == cur[1]) {
                all += m - 1;
            } else {
                all += loops;
                all += deg[cur[0]] + deg[cur[1]] - l[cur[0]] - l[cur[1]] - 2;
            }

        }
        System.out.println(all / 2);
        System.exit(0);
    }

    static void bfs(int v) {
        visited[v] = true;
        ArrayList<Integer> cur = graph[v];
        for (int i = 0; i < cur.size(); i++) {
            int n = cur.get(i);
            if (!visited[n]) {
                visited[n] = true;
                bfs(n);
            }
        }

    }

    static class MyInputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public MyInputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 1024);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

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

}