#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e5 + 5;
const int MOD = 1e9 + 7;
void add(int& a, int b) {
a += b;
if (a >= MOD) a -= MOD;
}
int n, m;
vector<int> adj[N];
// Đối với cách cài 2 in 1 này thì thực chất ta đang đi tính các giá trị dp với thứ tự topo ngược
// dp(u) là số cách đi từ u đến n
int memo[N];
int dp(int u) {
if (u == n) return 1;
int& ans = memo[u];
if (ans != -1) return ans;
ans = 0;
for (int v : adj[u]) {
add(ans, dp(v));
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
}
memset(memo, -1, sizeof memo);
cout << dp(1) << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7ICAKCnZvaWQgYWRkKGludCYgYSwgaW50IGIpIHsKCWEgKz0gYjsgCglpZiAoYSA+PSBNT0QpIGEgLT0gTU9EOyAKfQoKaW50IG4sIG07ICAKdmVjdG9yPGludD4gYWRqW05dOyAKCi8vIMSQ4buRaSB24bubaSBjw6FjaCBjw6BpIDIgaW4gMSBuw6B5IHRow6wgdGjhu7FjIGNo4bqldCB0YSDEkWFuZyDEkWkgdMOtbmggY8OhYyBnacOhIHRy4buLIGRwIHbhu5tpIHRo4bupIHThu7EgdG9wbyBuZ8aw4bujYwovLyBkcCh1KSBsw6Agc+G7kSBjw6FjaCDEkWkgdOG7qyB1IMSR4bq/biBuCmludCBtZW1vW05dOyAKCmludCBkcChpbnQgdSkgewoJaWYgKHUgPT0gbikgcmV0dXJuIDE7ICAKCWludCYgYW5zID0gbWVtb1t1XTsgCglpZiAoYW5zICE9IC0xKSByZXR1cm4gYW5zOyAgIAoJYW5zID0gMDsgICAKCWZvciAoaW50IHYgOiBhZGpbdV0pIHsKCQlhZGQoYW5zLCBkcCh2KSk7IAoJfQoJcmV0dXJuIGFuczsgIAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiBtOyAKCglmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewoJCWludCB1LCB2OwoJCWNpbiA+PiB1ID4+IHY7IAoJCWFkalt1XS5wdXNoX2JhY2sodik7IAoJfQoKCW1lbXNldChtZW1vLCAtMSwgc2l6ZW9mIG1lbW8pOyAKCgljb3V0IDw8IGRwKDEpIDw8ICdcbic7IAp9