#include int main() { using namespace std; unsigned long N, M; cin >> N >> M; vector> v(M); for(auto&& [B, C] : v){ cin >> B; long c; cin >> c; C = (c % static_cast(B) + B) % B; } sort(begin(v), end(v)); for(unsigned long i{1}; i < M; ++i)if(v[i - 1].first == v[i].first && v[i - 1].second != v[i].second){ cout << "NaN" << endl; return 0; } v.erase(unique(begin(v), end(v)), end(v)); vector possible(N + 1); iota(begin(possible), end(possible), 0UL); for(const auto& [B, C] : v){ possible.erase(remove_if(begin(possible), end(possible), [&B, &C](auto&& i){return i % B != C;}), end(possible)); if(empty(possible)){ cout << "NaN" << endl; return 0; } } cout << possible[0] << endl; return 0; }