#include<bits/stdc++.h>
using namespace std;
const int N=705;
int n,m,k,a[N][N],c[N],s[N][2],dp[N][N],ans=1e9;
void dfs(int u)
{
	s[k][c[u]]++;
	for(int v=1;v<=n;v++)
	{
		if(v==u||!a[u][v])
			continue;
		if(c[v]==-1)
		{
			c[v]=c[u]^1;
			dfs(v);
		}
		else if(c[u]==c[v])
		{
			puts("-1");
			exit(0);
		}
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			a[i][j]=1;
		c[i]=-1;
	}
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		a[u][v]=a[v][u]=0;
	}
	for(int i=1;i<=n;i++)
	{
		if(c[i]==-1)
		{
			k++;
			c[i]=0;
			dfs(i);
		}
	}
	dp[0][0]=1;
	for(int i=1;i<=k;i++)
	{
		for(int j=0;j<=n;j++)
		{
			if(j>=s[i][0]) dp[i][j]|=dp[i-1][j-s[i][0]];
			if(j>=s[i][1]) dp[i][j]|=dp[i-1][j-s[i][1]]; 
		}
	}
	for(int i=0;i<=n;i++)
		if(dp[k][i])
			ans=min(ans,i*(i-1)/2+(n-i)*(n-i-1)/2);
	printf("%d\n",ans);
	return 0;
}