#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;
static const double EPS = 1e-5;
typedef long long ll;
#define FOR(i,n) for(i=0;i<n;i++)

int s[30][30][4][100];
char mp[30][30];

struct ob{int a,b,c,d;};
stack<ob> o;
int r,c;

void f(ob tmp){
	if(tmp.a<0)tmp.a+=c;
	if(tmp.a>=c)tmp.a-=c;
	if(tmp.b<0)tmp.b+=r;
	if(tmp.b>=r)tmp.b-=r;
	if(tmp.d>='0'+16)tmp.d-=16;
	if(tmp.d<'0')tmp.d+=16;
	
	if(s[tmp.a][tmp.b][tmp.c][tmp.d]==0){
		s[tmp.a][tmp.b][tmp.c][tmp.d]=1;
		o.push(tmp);
	}
}

int main(){
	bool fr=false;
	cin>>r>>c;
	int i,j;
	for(j=0;j<r;j++){
		for(i=0;i<c;i++){
			cin>>mp[i][j];
		}
	}
	ob k;
	k.a=0;k.b=0;k.c=0;k.d='0'<=mp[0][0]&&'9'>=mp[0][0]?mp[0][0]:'0';
	o.push(k);
	s[0][0][0][k.d]=1;
	while(!o.empty()){
		ob tmp=o.top();
		o.pop();
		if(mp[tmp.a][tmp.b]=='<'){
			tmp.a--;
			if(tmp.a<0)tmp.a+=c;
			tmp.c=2;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='>'){
			tmp.a++;
			if(tmp.a>=c)tmp.a-=c;
			tmp.c=0;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='^'){
			tmp.b--;
			if(tmp.b<0)tmp.b+=r;
			tmp.c=3;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='v'){
			tmp.b++;
			if(tmp.b>r)tmp.b+=r;
			tmp.c=1;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='_'){
			if(tmp.d=='0'){
				tmp.a++;
				if(tmp.a>=c)tmp.a-=c;
				tmp.c=0;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}else{
				tmp.a--;
				if(tmp.a<0)tmp.a+=c;
				tmp.c=2;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='|'){
			if(tmp.d=='0'){
				tmp.b++;
				if(tmp.b>=r)tmp.b-=r;
				tmp.c=1;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}else{
				tmp.b--;
				if(tmp.b<0)tmp.b+=r;
				tmp.c=3;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='?'){
			ob tp=tmp;
			tmp.a--;
			if(tmp.a<0)tmp.a+=c;
			tmp.c=2;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
			tmp=tp;
			tmp.a++;
			if(tmp.a>=c)tmp.a-=c;
			tmp.c=0;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
			tmp=tp;
				tmp.b--;
			if(tmp.b<0)tmp.b+=r;
			tmp.c=3;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
			tmp=tp;
				tmp.b++;
			if(tmp.b>=r)tmp.b-=r;
			tmp.c=1;
			tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			f(tmp);
		}else if((mp[tmp.a][tmp.b]=='.')||('0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b])){
			if(tmp.c==0){
				tmp.a++;
				if(tmp.a>=c)tmp.a-=c;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}else if(tmp.c==1){
				tmp.b++;
				if(tmp.b>=r)tmp.b-=r;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}else if(tmp.c==2){
				tmp.a--;
				if(tmp.a<0)tmp.a+=c;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}else if(tmp.c==3){
				tmp.b--;
				if(tmp.b<0)tmp.b+=r;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d;
			}
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='@'){
			fr=true;
			break;
		}else if(mp[tmp.a][tmp.b]=='+'){
			if(tmp.c==0){
				tmp.a++;
				if(tmp.a>=c)tmp.a-=c;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d+1;
			}else if(tmp.c==1){
				tmp.b++;
				if(tmp.b>=r)tmp.b-=r;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d+1;
			}else if(tmp.c==2){
				tmp.a--;
				if(tmp.a<0)tmp.a+=c;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d+1;
			}else if(tmp.c==3){
				tmp.b--;
				if(tmp.b<0)tmp.b+=r;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d+1;
			}
			f(tmp);
		}else if(mp[tmp.a][tmp.b]=='-'){
			if(tmp.c==0){
				tmp.a++;
				if(tmp.a>=c)tmp.a-=c;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d-1;
			}else if(tmp.c==1){
				tmp.b++;
				if(tmp.b>=r)tmp.b-=r;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d-1;
			}else if(tmp.c==2){
				tmp.a--;
				if(tmp.a<0)tmp.a+=c;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d-1;
			}else if(tmp.c==3){
				tmp.b--;
				if(tmp.b<0)tmp.b+=r;
				tmp.d='0'<=mp[tmp.a][tmp.b]&&'9'>=mp[tmp.a][tmp.b]?mp[tmp.a][tmp.b]:tmp.d-1;
			}
			f(tmp);
		}
	}
	cout<<(fr?"YES\n":"NO\n");
	return 0;
}

Measured memory_bytes: 0