#include // O(N + M) 解法 [[nodiscard]] static inline constexpr std::vector> solve(const uint_fast32_t N, const uint_fast32_t M, const std::vector& A) noexcept { std::vector> ans; ans.reserve(M); uint_fast32_t i, j, length; for (i = 1, j = 0, length = 0; i <= N; ++i) { if (j != M && i == A[j]) ++length, ++j; else if (length != 0) ans.emplace_back(i - length, length), length = 0; } if (length != 0) ans.emplace_back(i - length, length); return ans; } static inline void output(const std::vector>& ans) noexcept { std::cout << ans.size() << '\n'; for (const auto& [S, L] : ans) std::cout << S << ' ' << L << '\n'; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); uint_fast32_t N, M; std::cin >> N >> M; std::vector A(M); for (auto& a : A) std::cin >> a; output(solve(N, M, A)); return 0; }