#include <bits/stdc++.h>
using namespace std;
int a[200000];
vector<int> bucket[500];
int query_min(int l, int r, int x) {
  int cnt = 0;
  while (l < r && l % 500 != 0)
    if (a[l++] < x) cnt++;
  while (l < r && r % 500 != 0)
    if (a[--r] < x) cnt++;
  while (l < r) {
    int b = l / 500;
    cnt +=
        lower_bound(bucket[b].begin(), bucket[b].end(), x) - bucket[b].begin();
    l += 500;
  }
  return cnt;
}
int query_max(int l, int r, int x) {
  int cnt = 0;
  while (l < r && l % 500 != 0)
    if (a[l++] > x) cnt++;
  while (l < r && r % 500 != 0)
    if (a[--r] > x) cnt++;
  while (l < r) {
    int b = l / 500;
    cnt +=
        bucket[b].size() - (upper_bound(bucket[b].begin(), bucket[b].end(), x) -
                            bucket[b].begin());
    l += 500;
  }
  return cnt;
}
int main() {
  int n, q;
  scanf("%d%d", &n, &q);
  for (int i = 0; i < (n); i++) {
    a[i] = i;
    bucket[i / 500].push_back(a[i]);
  }
  long long ans = 0;
  for (int i = 0; i < (q); i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    l--;
    r--;
    if (l > r) swap(l, r);
    ans -= query_max(0, l, a[l]);
    ans -= query_min(l, n, a[l]);
    ans -= query_max(0, r, a[r]);
    ans -= query_min(r, n, a[r]);
    if (a[l] > a[r]) ans++;
    if (l / 500 != r / 500) {
      *lower_bound(bucket[l / 500].begin(), bucket[l / 500].end(), a[l]) = a[r];
      *lower_bound(bucket[r / 500].begin(), bucket[r / 500].end(), a[r]) = a[l];
      sort(bucket[l / 500].begin(), bucket[l / 500].end());
      sort(bucket[r / 500].begin(), bucket[r / 500].end());
    }
    swap(a[l], a[r]);
    ans += query_max(0, l, a[l]);
    ans += query_min(l, n, a[l]);
    ans += query_max(0, r, a[r]);
    ans += query_min(r, n, a[r]);
    if (a[l] > a[r]) ans--;
    printf("%lld\n", ans);
  }
}
