#include <cstdio>
const int Mod = 1e9 + 7;
int f[1 << 15], n, m, u[110], v[110], P[110], s[15], d[1 << 15], to[1 << 15];
int main()
{
	scanf("%d %d", &n, &m);
	P[0] = 1; for(int i = 1; i <= m; ++i) P[i] = (P[i - 1] << 1) % Mod;
	for(int i = 1; i <= m; ++i) scanf("%d %d", &u[i], &v[i]);
	int Full = 1 << n;
	for(int i = 1; i < Full; ++i) d[i] = d[i - (-i & i)] + 1;
	for(int i = 1; i <= m; ++i) to[u[i] - 1] |= 1 << v[i] - 1;
	for(int i = 0; i < Full; ++i)
	{
		if(i & 1 ^ i >> 1 & 1);
		else f[i] = 1;
		int t = (i - 1) & i;
		while(t)
		{
			if(i - t & 1 ^ i - t >> 1 & 1 || !f[i - t]);
			else
			{
				int c1 = 0, c2 = 0, tmp = 0;
				for(int j = 0; j < n; ++j) if(i - t >> j & 1) s[j] = 0;
				for(int j = 0; j < n; ++j) 
					if(i - t >> j & 1) s[j] += d[to[j] & t];
					else if(t >> j & 1) c2 += d[to[j] & i - t];
				int g = 1ll * P[c2] * f[i - t] % Mod;
				for(int j = 0; j < n; ++j) if(i - t >> j & 1)
				{
					if(s[j]){ g = 1ll * g * (P[s[j]] - 1) % Mod; }
					else { g = 0; break; }
				}
				f[i] = (f[i] + g) % Mod;
			}
			t = (t - 1) & i;
		}
	}
	printf("%d\n", (P[m] - f[Full - 1] + Mod) % Mod);
	return 0;
}