#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;
}