For building an intuition about how to tell whether a language is recognizable, decidable, etc., I recommend checking out these notes I put together for a class on computability theory.
The key intuition I find most helpful is this idea of proving things - if you have a string that's in the language, is there some demonstration you could do that would prove to a skeptical but honest observer that you're right? So, for example, in the case of the first language, you could tell the observer "watch this - I'm going to run this TM on this group of 1001 strings, and I know that it'll accept each of them in at most k steps." The observer could then watch for k steps and see that it accepts all the strings, at which point they'd know for certain that you're right and that the TM's encoding is indeed in the language.
On the other hand, can you think of a demonstration that would prove that a TM accepts at most some number of strings? I can't, and that's because there's no general way to do this. That second language is therefore not recognizable. But proving that is another step - you'd need to either reduce some known non-RE language to it or use some sort of self-reference trick to prove that it's not recognizable. There's also a third way - you could prove that its complement is recognizable but not decidable, which would ensure the language itself isn't recognizable. That last option is probably the easiest here - can you show that the complement is recognizable using an argument like the one above, then show the language isn't decidable?