#include <bits/stdc++.h>
const int maxx = 1000001;
int x[maxx], y[maxx];
unsigned long long hash[maxx], vl[maxx], count = 0, check = 1, mul = 1;
bool compare(unsigned long long a, unsigned long long b) { return a > b; }
unsigned long long sum1ton(unsigned long long n) { return n * (n - 1) / 2; }
int main() {
  int a, b;
  scanf("%d %d", &a, &b);
  hash[0] = 1;
  for (int i = 1; i <= a; i++) {
    hash[i] = hash[i - 1] * mul + 31;
    mul = mul * 13 + 23;
  }
  for (int i = 0; i < b; i++) {
    scanf("%d %d", &x[i], &y[i]);
    vl[x[i]] -= hash[y[i]];
    vl[y[i]] -= hash[x[i]];
  }
  for (int i = 0; i < b; i++) {
    if (vl[x[i]] + hash[y[i]] == vl[y[i]] + hash[x[i]]) {
      count++;
    }
  }
  std::sort(vl + 1, vl + a + 1, compare);
  for (int i = 1; i < a; i++) {
    if (vl[i] == vl[i + 1])
      check++;
    else {
      count += sum1ton(check);
      check = 1;
    }
  }
  count += sum1ton(check);
  printf("%I64d", count);
  return 0;
}
