#include<stdio.h>
#include<string.h>
int min(int a,int b){return a<b?a:b;}
bool a[710][710];
int c[710],n,M1,M2;
bool dfs(int x,int f){
	if(c[x])return c[x]!=f;
	c[x]=f;
	M1+=f==2;
	M2+=f==3;
	for(int i=1;i<=n;i++){
		if(a[x][i]&&dfs(i,f^1))return 1;
	}
	return 0;
}
bool t1[710],t2[710];
int s2(int n){return n*(n-1)/2;}
int main(){
	int m,i,j,x,y,ans;
	scanf("%d%d",&n,&m);
	for(i=1;i<n;i++){
		for(j=i+1;j<=n;j++)a[i][j]=a[j][i]=1;
	}
	while(m--){
		scanf("%d%d",&x,&y);
		a[x][y]=a[y][x]=0;
	}
	t1[0]=1;
	for(i=1;i<=n;i++){
		if(!c[i]){
			M1=M2=0;
			if(dfs(i,2)){
				puts("-1");
				return 0;
			}
			memset(t2,0,sizeof(t2));
			for(j=0;j<=n;j++){
				if(t1[j])t2[j+M1]=t2[j+M2]=1;
			}
			memcpy(t1,t2,sizeof(t2));
		}
	}
	ans=2147483647;
	for(i=1;i<n;i++){
		if(t1[i])ans=min(ans,s2(i)+s2(n-i));
	}
	printf("%d",ans);
}