// Collecting Numbers II #include using namespace std; int main() { int n; cin >> n; int m; cin >> m; vector in(n); for (auto &e: in) cin >> e; int count = 1; unordered_map pos; for (int i{}; i < n; i++) pos[in[i]] = i; for (int i = 1; i < n; i++) { if (pos[i] > pos[i+1]) count ++; } // cout << count << endl; for (int i{}; i < m; i++) { int a, b; cin >> a >> b; if (in[a - 1] > 1 && pos[in[a - 1] - 1] > a - 1 && pos[in[a - 1] - 1] <= b - 1) count--; if (in[a - 1] > 1 && pos[in[a - 1] - 1] < a - 1 && pos[in[a - 1] - 1] >= b - 1) count++; if (in[a - 1] < n && pos[in[a - 1] + 1] > a - 1 && pos[in[a - 1] + 1] <= b - 1) count++; // if (in[a - 1] < n && pos[in[a - 1] + 1] < a - 1 && pos[in[a - 1] + 1] >= b - 1) count--; if (in[b - 1] > 1 && pos[in[b - 1] - 1] > a - 1 && pos[in[b - 1] - 1] < b - 1) count++; if (in[b - 1] > 1 && pos[in[b - 1] - 1] < a - 1 && pos[in[b - 1] - 1] > b - 1) count--; if (in[b - 1] < n && pos[in[b - 1] + 1] > a - 1 && pos[in[b - 1] + 1] < b - 1) count--; if (in[b - 1] < n && pos[in[b - 1] + 1] < a - 1 && pos[in[b - 1] + 1] > b - 1) count++; pos[in[a - 1]] = b - 1; pos[in[b - 1]] = a - 1; swap(in[a-1], in[b-1]); cout << count << endl; } return 0; }