#include <bits/stdc++.h>
using namespace std;
pair<long long, long long> h[2000000];
vector<int> r[1100000];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  memset(h, 0, sizeof(h));
  for (int i = 0; i < m; i++) {
    int x1, y1;
    scanf("%d%d", &x1, &y1);
    long long x = x1, y = y1;
    h[x - 1].first += 1543 * y * y * y + 1000007 * y * y + 1123581321 * y;
    h[x - 1].second += 997 * y * y * y + 12048731 * y * y + 872717389 * y;
    h[y - 1].first += 1543 * x * x * x + 1000007 * x * x + 1123581321 * x;
    h[y - 1].second += 997 * x * x * x + 12048731 * x * x + 872717389 * x;
    r[x].push_back(y);
    r[y].push_back(x);
  }
  long long ans2 = 0;
  for (long long x = 1; x <= n; x++) {
    for (int i = 0; i < r[x].size(); i++) {
      long long y = r[x][i];
      if (h[x - 1].first -
                  (1543 * y * y * y + 1000007 * y * y + 1123581321 * y) ==
              h[y - 1].first -
                  (1543 * x * x * x + 1000007 * x * x + 1123581321 * x) &&
          h[x - 1].second -
                  (997 * y * y * y + 12048731 * y * y + 872717389 * y) ==
              h[y - 1].second -
                  (997 * x * x * x + 12048731 * x * x + 872717389 * x))
        ans2++;
    }
  }
  sort(h, h + n);
  long long g = 1;
  long long ans = 0;
  for (int i = 1; i < n; i++) {
    if (h[i] == h[i - 1]) g++;
    if (h[i] != h[i - 1] || i + 1 == n) {
      ans += (g * (g - 1)) / 2;
      g = 1;
    }
  }
  cout << ans + (ans2 / 2) << endl;
  return 0;
}
