#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
#define pb push_back
#define fi first
#define se second
const int MAX = 3e5 + 5;
const int MOD = 1e9 + 7;
#define int ll
int n,m;
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> m;
//	vector <pii> v(m);
//	for(auto &it : v)cin >> it.fi >> it.se;
//	for(int i = 0 ; i < m ; i++){
//		for(int j = 0 ; j < m ; j++){
//			if(i== j)continue;
//			ll dis = abs(v[i].fi - v[j].fi);
//			if(dis % v[i].se)continue;
//			
//			adj[i].pb({j, dis / v[i].se});
//		}
//	}
//	
//	ll dist[m + 4];
//	bool vis[m];memset(vis, 0, sizeof(vis));
//	for(int i = 0 ; i <= m ; i++)dist[i] = (ll)1e18;
//	dist[0] = 0;
//	for(int i = 0 ; i < m ; i++){
//		int t = -1;
//		for(int j = 0 ; j < m ; j++){
//			if(!vis[j] && (t == -1 || dist[j] < dist[t])){
//				t = j;
//			}
//		}
//		
//		if(dist[t] == (ll)1e18){
//			cout << -1 << endl;
//			return 0;
//		}
//		if(t == 1){
//			cout << dist[t] << endl;
//			return 0;
//		}
//		
//		vis[t] = 1;
//		for(auto [nxt, we] : adj[t]){
//			if(dist[nxt] > dist[t] + we){
//				dist[nxt] = dist[t] + we;
//			}
//		}
//	}
//	cout << -1 << endl;
	
	
	int st, en;
	vector <set<int>> bs(n);
	vector <pii> adj[n];
	
	for(int i = 0 ; i < m ; i++){
		int b, p; cin >> b >> p;
		bs[b].insert(p);
		
		if(i == 0)st = b;
		if(i == 1)en = b;
	}
	
	for(int u = 0 ; u < n ; u++){
		for(auto doge : bs[u]){
			for(int v = u - doge ; v >= 0 ; v -= doge){
				adj[u].pb({v, (u - v) / doge});
				if(bs[v].find(doge) != bs[v].end())break;
			}
			
			for(int  v = u + doge ; v < n ; v += doge){
				adj[u].pb({v, (v - u) / doge});
				if(bs[v].find(doge) != bs[v].end())break;
			}
		}
	}
	
	priority_queue <pii, vector <pii>, greater<pii>> pq;
	ll vis[n];
	for(int i = 0 ; i < n ; i++)vis[i] = MOD;
	pq.push({0, st});
	
	while(pq.size()){
		auto [dist, u] = pq.top(); pq.pop();
		if(u == en){
			cout << dist << endl;
			return 0;
		}
		
		for(auto[v, w] : adj[u]){
			if(dist + w < vis[v]){
				vis[v] = dist + w;
				pq.push({vis[v], v});
			}
		}
	}
	cout << -1 << endl;
	
	return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |