#include <bits/stdc++.h>

const int MAXN = 15;
const int mod = 1000000007;
typedef long long LL;
void reduce(int & x) { x += x >> 31 & mod; }
int out[MAXN], n, m;
int f[1 << 15];
inline bool g(int x) { return (x & 3) == 0 || (x & 3) == 3; }
inline int h(int x) { return 1 << __builtin_popcount(x); }
#define X (T >> j & 1)
int main() {
	std::ios_base::sync_with_stdio(false), std::cin.tie(0);
	std::cin >> n >> m;
	for (int i = 1, x, y; i <= m; ++i)
		std::cin >> x >> y, out[--x] |= 1 << --y;
	f[0] = 1; const int U = 1 << n;
	int ans = 1; while (m--) reduce(ans += ans - mod);
	for (int i = 1; i != U; ++i) if (g(i)) {
		for (int S = i; S; S = S - 1 & i) if (g(S)) {
			int T = i - S, t = 1;
			for (int j = 0; j != n; ++j) if (i >> j & 1)
				t = (LL) t * (h(out[j] & (X ? S : T)) - X) % mod;
			reduce(f[i] += (LL) t * f[T] % mod - mod);
		}
	}
	reduce(ans -= f[U - 1]);
	std::cout << ans << '\n';
	return 0;
}
