#include<bits/stdc++.h>
using namespace std;
const int N=5e3+10;

int n,m;
int a[N]; 
bool dp[N][N]; //dp[i][j] 表示第i次跳跃能否到达位置j 能到达则标记为true,否则标记为false 

void solve(){
	
	//将1-n转化为0-n-1
	//第一次跳跃  能跳跃到的位置标记为true 
	dp[1][(0+a[1])%n]=true;//顺时针走 
	dp[1][((0-a[1])%n+n)%n]=true;//逆时针走 
	
	//后续m-1次跳跃 
	for(int i=2;i<=m;i++){//i代表第i次跳跃 
		for(int j=0;j<n;j++){//枚举0-n-1 即枚举所有位置 
			//第i-1次跳跃能跳到的位置  (也就是上次跳跃能跳跃到的位置) 
			if(dp[i-1][j]){
				dp[i][(j+a[i])%n]=true; //顺时针走 
				dp[i][((j-a[i])%n+n)%n]=true; //逆时针走 
			}
		}
	}
	 
	if(dp[m][0]){//第m次跳跃能到达位置0 
		cout<<"YES"<<endl;
	}else{//第m次跳跃不能到达位置0 
		cout<<"NO"<<endl;
	}
	return;
}
//看懂的大佬们,能否点个小赞

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a[i];
	}
	
	solve();

    return 0;
}