import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; class Main { public class Number { int val; int index; public Number(int v , int i) { val = v; index = i; } } static Main main; static long sp; public static void main(String [] args ) { //long st = System.currentTimeMillis(); main = new Main(); try{ String str; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedOutputStream bos = new BufferedOutputStream(System.out); String eol = System.getProperty("line.separator"); byte [] eolb = eol.getBytes(); str = br.readLine(); int blank = str.indexOf( " "); int n = Integer.parseInt(str.substring(0,blank)); int m = Integer.parseInt(str.substring(blank+1)); int j=0; int s=0; int k =0; str = br.readLine(); int length = str.length(); int [] ar = new int[n]; sp = 1000000007; while(j stack = new ArrayList(); long ans = 1; for(int i = 0 ; i < n ; i++) { if(stack.size()==0) { stack.add(main.new Number(ar[i],i)); } else if(stack.get(stack.size()-1).val>ar[i]) { while(stack.get(stack.size()-1).val>ar[i]) { Number num = stack.remove(stack.size()-1); ans *= i - num.index + 1; ans %= sp; if(stack.size()==0) { break; } } stack.add(main.new Number(ar[i],i)); } else { stack.add(main.new Number(ar[i],i)); } } bos.write(new Long(ans).toString().getBytes()); bos.write(eolb); bos.flush(); } catch(IOException ioe) { ioe.printStackTrace(); } //long en = System.currentTimeMillis(); //System.err.println("time = " + (en-st)); } } ; } }