def inv_gcd(a,b): a=a%b if a==0: return (b,0) s=b;t=a m0=0;m1=1 while(t): u=s//t s-=t*u m0-=m1*u s,t=t,s m0,m1=m1,m0 if m0<0: m0+=b//s return (s,m0) def inv_mod(x,m): assert 1<=m z=inv_gcd(x,m) assert z[0]==1 return z[1] def crt(r,m,maxr): assert len(r)==len(m) n=len(r) r0=0;m0=1 for i in range(n): assert 1<=m[i] r1=r[i]%m[i] m1=m[i] if m0maxr: return (0,0) return (r0,m0) n = int(input()) b = []; c = [] for _ in range(int(input())): bi, ci = map(int, input().split()) b.append(bi); c.append(ci) r, m = crt(c, b, n) print(r if m else "NaN")